前几天看到一个用Set来存放对象的demo,令我难受至极,于是乎我决定重新复习一遍Collection接口。
容器继承了Collection接口,容器大致的种类有:
(1)List
(2)Set
(3)Map
(4)Stack
(5)Properties
以下就简单总结一下用的较多的前三种
1、List:List的属性是可重复且有序的(就是说你放进去是怎样的顺序,出来也是怎样的顺序),可利用get方法获取属性以及对象
(1)ArrayList:底层是数组,因此查询以及赋值较快,而增删较慢。
(2)LinkedList:底层是链表,增删较快,而查询和赋值较慢。
(3)Vector:和ArrayList一样底层是数组,但Vector是线程安全的。
2、Set:Set的属性是不可重复且无序的,Set不允许直接对属性操作
(1)HashSet:底层是哈希表
(2)TreeSet:底层是二叉树
3、Map:存储键值对
(1)HashMap:底层是哈希表,线程不安全,允许null值
(2)HashTable:底层是哈希表,线程安全,不允许null值
4、迭代器的使用:利用Iterator获取迭代对象
public class JavaCollectDemo {
public static void main(String[] args) {
Set<String> all = Set.of("Hello", "ScauJava", "Scau"); // 创建Set集合
Iterator<String> iter = all.iterator(); // 实例化Iterator接口对象
while (iter.hasNext()) { // 集合是否有数据
String str = iter.next(); // 获取每一个数据
System.out.print(str + "、"); // 输出数据
}
}
}
迭代器遍历map的方法:可看成先用entrySet()方法将map转为Set类,再构造迭代器
Set<Entry<Integer,String>> ss = map.entrySet();
for(Iterator<Entry<Integer,String>> iter = ss.iterator();iter.hasNext();) {
Entry<Integer,String> temp = iter.next();
System.out.println(temp);
}
迭代器遍历map的第二种方法
Set<Integer> ks = map.keySet();
for(Iterator<Integer> iter = ks.iterator();iter.hasNext();) {
Integer temp = iter.next();
System.out.println(temp);
}
5、使用 Stream 进行数据采集
public class JavaCollectDemo {
public static void main(String[] args) throws Exception {
List<String> all = new ArrayList<String>(); // 实例化List集合
Collections.addAll(all, "Java", "JavaScript", "JSP",
"Json", "Python", "Ruby", "Go"); // 集合数据保存
Stream<String> stream = all.stream(); // 获取Stream接口对象
// 将每一个元素全部变为小写字母,而后查询是否存在有字母“j”,如果存在则进行个数统计
System.out.println(stream.filter((ele) ->
ele.toLowerCase().contains("j")).count());
}
}
6、重写comparable接口
public class SortUtil {
public static void sortInfoById(List<Student> stu) {
Collections.sort(stu,new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
Student s1 = (Student)o1;
Student s2 = (Student)o2;
if(s1.id>s2.id)
return 1;
else if(s1.id<s2.id)
return -1;
else
return 0;
}
});
}
}