目录
一、帮助类
1.集合的帮助类:Collections
(1)Collections是集合的帮助类,他的里面有一堆的静态的方法
(2)比如排序,反转,求最大值等等
- 排序方法的使用
- 方法一:Collections.sort(集合名);
- 方法二:当需要排序的是集合中保存的是类的时候,我们就需要自己写一个排序规则(比较器),比较器需要实现Comparator接口
- 如:按年龄排序
-
// 比较器 public class AgeComparator implements Comparator { @Override public int compare(Object o1, Object o2) { Student s1 = null; Student s2 = null; if(o1 instanceof Student){ s1 = (Student) o1; } if(o2 instanceof Student){ s2 = (Student) o2; } if(s1 != null && s2 != null){ return s1.getsAge() - s2.getsAge(); } return 0; } } public class Demo { public static void main(String[] args) { ArrayList<Student> list = new ArrayList<Student>(); list.add(new Student(1,"James爱学习",26,99)); list.add(new Student(2,"余悸",20,90)); list.add(new Student(3,"朱兴康",21,95)); list.add(new Student(4,"贺耀东",23,98)); list.add(new Student(5,"富婆",24,92)); //利用比较器排序 Collections.sort(list,new AgeComparator()); } }
2.数组的帮助类:Arrays
(1)Arrays是数组的帮助类,和Collections类似
二、Set集合
1.集合的特点
(1)List集合中存储的值是可以重复的,并且是有序的;
(2)Set集合中存储的值是不可以重复的,并且是无序的,但是也可以说它是有序的;
2.Set集合为什么是无序的
(1)Set集合是无序的主要是因为Set集合中的数据不是按添加的顺序排序的,不能通过下标去查找。
3.Set集合为什么是有序的
(1)Set集合是有序的主要是因为Set集合自带一个排序的规则,存入到Set集合中的数据会按它的排序规则自动排序。
4.Set集合的打印方式
(1)方式一:使用foreach循环
Set set = new HashSet();
set.add(3);
set.add(5);
set.add(2);
for (Object o : set) {
System.out.print(o + " ");
}
(2)方式二:使用迭代器(iterator)
- 迭代器可以看作是循环的一种
- 格式
-
Set set = new HashSet(); set.add(3); set.add(5); set.add(2); // 迭代器 -->> 循环的一种 Iterator iterator = set.iterator(); while (iterator.hasNext()){ System.out.print(iterator.next()); }
5.因为Set集合中不能保存重复的值,所以如果添加了重复的值,是覆盖了还是不能添加进去,怎么验证
(1)将两个不同的类变为同一个,欺骗Java虚拟机
- 原理:比较两个对象是否相同,首先会比较他们的hashCode是否相同,如果相同就会继续使用equals方法,如果equals方法返回为true,则这两个对象才是相同的。
- 实现方法:使用hashCode和equals方法,将hashCode的返回值设置为相同的,将equals的返回值设置为true。
-
public class Cat { @Override public int hashCode() { return 1; } @Override public boolean equals(Object obj) { return true; } } public class Dog { @Override public int hashCode() { return 1; } @Override public boolean equals(Object obj) { return true; } }
(2)不能添加进去
(3)使用的是外面的对象的equals方法比较里面的对象
(4)验证过程
public class Cat {
@Override
public int hashCode() {
return 1;
}
@Override
public boolean equals(Object obj) {
return true;
}
}
public class Dog {
@Override
public int hashCode() {
return 1;
}
@Override
public boolean equals(Object obj) {
return false;
}
}
public class Demo {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
Set set = new HashSet();
set.add(d);
set.add(c);
System.out.println(set.size());
for (Object o : set) {
System.out.println(o);
}
}
}
三、Map集合
1.Map集合是键值对的形式,值可以重复,但是键不可以重复
(1)格式:
Map map = new HashMap();
map.put(123,456);
2.Map集合的查找是通过键去找值
3.键和值是可以迭代的
(1)键迭代出来的是一个Set集合(不能重复)
(2)值迭代出来的是一个Collection集合(可以重复)
4.获取Map集合的大小
(1)集合名.size()
Map map = new HashMap();
map.put(123,456);
System.out.println(map.size());
5.Map集合的添加元素和获取元素
(1)添加:集合名.put(键,值);
(2)获取:集合名.get(键);
6.获取全部的值或者全部的键
(1)获取全部的值:集合名.values()
Collection values = map.values();
for (Object o : values){
System.out.println(o);
}
(2)获取全部的键:集合名.keySet()
Set set = map.keySet();
for (Object o : set){
System.out.println(o + "\t" + map.get(o));
}
(3)行:集合名.entrySet()
- entrySet是行迭代,我们通常会使用entrySet方法迭代,它的迭代类型属于行类型,它的效率是最高的。
-
Map map = new HashMap(); map.put(123,456); Set<Map.Entry> set = map.entrySet(); Iterator<Map.Entry> iterator = set.iterator(); while (iterator.hasNext()){ Map.Entry next = iterator.next(); System.out.println(next.getKey() + "\t" + next.getValue()); }
7.HashMap和HashTable的区别
(1)HashMap可以保存null值,但是HashTable不可以;
(2)HashMap比HashTable存储速度更快,但是HashTable比HashMap更安全;
(3)HashTable中的contains方法在HashMap中已经取消;