Java易错知识点

1.length属性是针对数组而言的

public static void testArr() {
  // 一维数组
  int[] array = new int[7];
  System.out.println(array.length);  //7
  // 二维数据
  int[][] array2 = new int[5][7];
  System.out.println(array2.length); //这里输出的是行数 5
  System.out.println(array2[1].length); //这里输出的是列数 7
}

2.length() 是字符串的方法

        这里是利用字符串求水仙花数的一个例子

//水仙花数字
public static void func(String str) {
    char[] strs=str.toCharArray(); //把字符串转换成字符数组
    int []arr=new int[str.length()];//这里使用的是字符串的length()方法,返回的是字符串的长度包括空格
    for(int i=0;i<arr.length;i++) {
        arr[i]=Integer.parseInt(strs[i]+"");
    }
    if(Integer.parseInt(str)==arr[0]*arr[0]*arr[0]+arr[1]*arr[1]*arr[1]+arr[2]*arr[2]*arr[2]) {
        System.out.println("方法二"+Integer.parseInt(str)); 
    }   
}

3.size()是针对泛型集合的,查看泛型中有多少元素    

        下面是集合类的演示


public static void collEctionTest(){
    List<
String>list = new ArrayList<String>();
    List<
String>list2 = new LinkedList<String>();
    Map<Comparable, 
String> map=new HashMap<Comparable, String>();
    Set<Comparable> set=
new HashSet<Comparable>();
    list.add(
"保护环境");  
    list.add(
"爱护地球");  
    list2.add(
"一方有难");
    list2.add(
"八方支援");
    map.put(
1"syw");
    map.put(
2"加油");
    map.put(
3"努力");
    map.put(
"要""努力");
    set.add(
1);
    set.add(
"234");
    set.add(
"syw");
    set.add(
'a');
    System.out.println(
"ArrayList元素数:"+list.size()); //2
    System.out.println("LinkedList元素数:"+list2.size()); //2
    System.out.println("HashMap元素数:"+map.size()); //4
    System.out.println("HashSet元素数:"+set.size()); //3
}

4.反转

        4.1数组反转(注意:数组反转是没有reverse方法的)


//数组反转
public static void arrReverse(int []arr) {
    
int []arrRes=new int[arr.length];
    
for(int i=0;i<arr.length;i++) {
        arrRes[i]=arr[arr.length-
1-i];
    }
    
for (int i : arrRes) {
        System.out.println(i);
    }
}

      4.2集合反转(可以使用Collections类的反转方法)


public static void collReverse() {
    ArrayList<
String> arrayList = new ArrayList<String>();
    arrayList.add(
"A");
    arrayList.add(
"B");
    arrayList.add(
"C");
    arrayList.add(
"D");
    arrayList.add(
"E");
    System.out.println(
"反转前排序: " + arrayList);
    Collections.reverse(arrayList);  
    System.out.println(
"反转后排序: " + arrayList);
}

5.数组逆序

        方式一:

public void arrayReverse2(int[] originArray) {
    reverseArray = 
new int[length];
    
for (int i = 0; i < length; i++) {
        reverseArray[i] = originArray[length - i - 
1];
    }
}

        方法二:

public void arrayReverse1() {
    reverseArray = 
new int[length];
    ArrayList arraylist = 
new ArrayList();
    
for (int i = 0; i < length; i++) {
        arraylist.add(originArray[i]); 
//存放元素
    }
    Collections.reverse(arraylist); 
//使用方法进行逆序
    //完成逆序后,可以保存到新数组reverseArray
    for (int i = 0; i < length; i++) {
        reverseArray[i] = (
int) arraylist.get(i);
    }
}
 

        方法三:

public void arrayReverse3() {
    
int temp = 0;
    
for (int i = 0; i < length / 2; i++) {
        temp = originArray[i];
        originArray[i] = originArray[length - i - 
1];
        originArray[length - i - 
1] = temp;
    }
}

6 i++和++i和i=i+1

int i=1;
System.out.println(i+1);  //此时输出的值为2
int j=1;
System.out.println(j++);  //此时输出的值为1,这个表达式结束之后j才变成2
System.out.println(j);  //此时输出的值为2
int k=1;
System.out.println(++k);  //此时输出的值为2

7 直接输出List,Set,Map的注意事项

如果list,set或map中存放的是基本数据类型,则可以直接输出,如果是实体类,则需要实体类重写toString方法。

//list集合(有序,可重复),索引从0开始
        //ArrayList
        // 默认的范型是Object类型的,素以可以添加不同种类型的变量
        ArrayList<Object> lists = new ArrayList<>();
        lists.add("syw");
        lists.add(2);
        lists.add(3.0f);
        System.out.println(lists+":"+lists.get(0)); //基本类型可以直接输出
        //如果传入的是实体类,则需要该实体类重写toString()方法才能正常输出
        ArrayList<Teacher> list2 = new ArrayList<>();
        list2.add(new Teacher("sun",23));
        list2.add(new Teacher("yang",22));
        list2.add(new Teacher("wei",24));
        System.out.println(list2+":"+list2.get(0));
        //LinkedList
        LinkedList<Object> list3 = new LinkedList<>();
        list3.add("123");
        list3.add(456);
        list3.add(6.f);
        System.out.println(list3+":"+list3.get(0));
        //如果传入的是实体类,则需要该实体类重写toString()方法才能正常输出
        LinkedList<Teacher> list4= new LinkedList<>();
        list4.add(new Teacher("li",12));
        list4.add(new Teacher("meng",21));
        list4.add(new Teacher("yao",23));
        System.out.println(list4+":"+list4.get(0));
//set集合(无序(输出的顺序和输入的顺序可能不一致),不可重复)
        //HashSet
        HashSet<Object> sets = new HashSet<>();
        sets.add("syw");
        sets.add("lmy");
        sets.add(999);
        System.out.println(sets);  //因为set无序,没法确定索引的到底是哪个,所以不能通过get索引查看
        HashSet<Teacher> set2 = new HashSet<>();
        set2.add(new Teacher("lmy",22));
        set2.add(new Teacher("syw",24));
        set2.add(new Teacher("999",999));
        System.out.println(set2);
        //TreeSet:有序的set(注意TreeSet要求添加的数据类型必须一致)
        TreeSet<Object> set3 = new TreeSet<>();
        set3.add(123);
        set3.add(345);
        set3.add(222);
        //set3.add("syw"); ,此处不能添加字符串,因为添加数据的类型需要一致
        System.out.println(set3);   //基本类型默认会按照从小到大的顺序进行自动排序
        TreeSet<Teacher> set4 = new TreeSet<>();
        //注意:如果存放实体类,需要实现Comparable<Teacher>排序方法,重写compareTo接口,否则会报错
        set4.add(new Teacher("syw",123));
        set4.add(new Teacher("lmy",108));
        set4.add(new Teacher("kkk",876));
        System.out.println(set4);

//Map集合
        // HashMap默认的是键和值都为Object类型,也就是键和值都可以为任意类型包括null
        HashMap<Object, Object> map1 = new HashMap<>();
        map1.put("syw","lmy");
        map1.put("s",1);
        map1.put(9,"l");
        map1.put("hh",new Teacher("sdf",12));
        map1.put(null,123);
        map1.put(123,null);
        System.out.println(map1+":"+map1.get(null));
        //TreeMap(有序:按照键进行排序),需要重写比较方法,之后还要判断比较的键是否为null
        TreeMap<String, Object> map2 = new TreeMap<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if(o1==null){ //如果不判断是否为空,则键无法使用null
                    return 1;
                }else{
                    return o1.charAt(0)-o2.charAt(0);
                }
            }
        });
        map2.put("syw","lmy");
        map2.put("s",1);
        map2.put("9","l");
        map2.put("hh",new Teacher("sdf",12));
        map2.put("null",123);
        System.out.println(map2+":"+map2.get("null"));

注意:TreeMap默认不支持键为null,但是值可以为null。如果想要键存储null,则需要重写比较方法,并且在重写的比较方法中加入判空操作。
END

全部评论