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());
}
}