javaSE21/9/23

Map接口的使用

public class Test {
    public static  void main(String[] args) {
        Map<String,String> map = new HashMap<>();//创建Map对象
        //添加
        map.put("cn","中国");
        map.put("uk","英国");
        map.put("usa","美国");
        map.put("cn","zhongguo");//由于与上面的键一致 所以会覆盖
        System.out.println(map.size());
        System.out.println(map.toString());
        /*
        删除
        map.remove("cn");
        System.out.println(map.size());
        System.out.println(map.toString());
         */
        //遍历
        System.out.println("---------keySet遍历---------");
        Set<String> keySet = map.keySet();//keySet的返回值是Set集合
        for (String key:keySet) {
            System.out.println(key+":"+map.get(key));//get(key)方法是获取key的值
        }
        System.out.println("-----------entrySet遍历-----------");
        /*
        entrySet返回类型为Map下的Entry
        该方法会将数据成对的封装起来,用映射对Entry封装
         */
        Set<Map.Entry<String,String>> entries =  map.entrySet();

        for (Map.Entry<String,String> entry:entries) {
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }

}

HashMap

  • 构造方法默认初始容量16
  • 刚创建HashMap之后没有添加元素table= null,size = 0;为了节省空间,当添加第一个元素时,table容量调整为16,(table为数组容量)
  • 当元素个数大于阈值,即数组容量的75%,会进行扩存,扩容后大小是原来的两倍
  • 当链表长度大于8,并且数组 元素个数大于等于64时,会调整为红黑树,目的是提高执行效率
  • 当链表长度小于6时,红黑树调整成链表
//使用key的HashCode和equals作为是否重复的依据,HashCode看的是地址值
public class Test {
    public static  void main(String[] args) {
        HashMap<Student,String> students = new HashMap<>();
        Student s1 = new Student("小明",20);
        Student s2 = new Student("小刚",19);
        Student s3 = new Student("小红",18);
        students.put(s1,"北京");
        students.put(s2,"上海");
        students.put(s3,"重庆");
        //导入HashCode和equals后加不进重复的数据
        students.put(new Student("小明",20),"北京"); 
        System.out.println(students.size());
        System.out.println(students.toString());
        //遍历
        System.out.println("---------keySet遍历----------");
        for (Student key:students.keySet()) {
            System.out.println(key.toString()+students.get(key));
        }
        System.out.println("---------entrySet遍历------------");
        for (Map.Entry<Student,String> entry:students.entrySet()
             ) {
            System.out.println(entry.getKey()+entry.getValue());
        }
    }

}
@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

TreeMap

public class Student implements Comparable<Student>{
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Student o) {
        int n1 = this.name.compareTo(o.getName());
        int n2 = this.age-o.age;
        return n1==0?n2:n1;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    public String toString(){//方法重写
        return name+":"+age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class Test {
    public static  void main(String[] args) {
        TreeMap<Student, String> students = new TreeMap<>();
        Student s1 = new Student("小明", 20);
        Student s2 = new Student("小刚", 19);
        Student s3 = new Student("小红", 18);
        students.put(s1, "北京");
        students.put(s2, "上海");
        students.put(s3, "重庆");
        System.out.println(students.size());
        System.out.println(students.toString());
        //遍历
        System.out.println("----------keySet遍历---------");
        for (Student key:students.keySet()
             ) {
            System.out.println(key+students.get(key));
        }
        System.out.println("----------entrySet遍历---------");
        for (Map.Entry<Student,String> entey:students.entrySet()
             ) {
            System.out.println(entey.getKey()+entey.getValue());
        }
    }
}

Collections工具类

  • 概念:集合工具类,定义除了存取外的集合常用方法
public class Test {
    public static  void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(20);
        list.add(2);
        list.add(25);
        list.add(14);
        list.add(8);
        System.out.println(list.toString());
        //sort排序
        Collections.sort(list);
        System.out.println(list.toString());
        //binarySearch二分查找
        int n = Collections.binarySearch(list,14);
        System.out.println(n);
        //copy复制
        List<Integer> list1 = new ArrayList<>();
        for (int i = 0; i <list.size() ; i++) {
            list1.add(0);
        }//目标集合必须与原集合长度相同,先在目标集合中放入等长的0
        Collections.copy(list1,list);
        System.out.println(list1.toString());
        //reverse反转
        Collections.reverse(list);
        System.out.println(list.toString());
        //shuffle打乱
        Collections.shuffle(list);
        System.out.println(list.toString());
        //list.toArray集合转成数组
        Integer[] arr = list.toArray(new Integer[0]);
        //给的数珠长度如果比集合小,那么数组长度会与集合长度相等,如大,那就是数组自己的长度
        System.out.println(arr.length);
        System.out.println(Arrays.toString(arr));
        //Arrays.asList数组转成集合
        //数组转成的集合不能添加和删除
        String[] str = {"张三","李四","王五"};
        List<String> list2 = Arrays.asList(str);
        System.out.println(list2.size());
        System.out.println(list2.toString());
    }
}
posted @ 2021-09-23 09:18  想吃坚果  阅读(31)  评论(0)    收藏  举报