Java的集合框架
发布于 2023-03-01
Java的集合框架有哪些数据结构?
Section titled “Java的集合框架有哪些数据结构?”- List(列表):有序的集合,可以包含重复元素。常用的实现类有ArrayList、LinkedList和Vector。
- Set(集):不允许包含重复元素的集合。常用的实现类有HashSet和TreeSet。
- Queue(队列):按照一定规则进行插入和删除操作的集合。常用的实现类有LinkedList和PriorityQueue。
- Map(映射):存储键值对的集合,每个键只能出现一次。常用的实现类有HashMap、TreeMap和LinkedHashMap。
- Stack(栈):后进先出(LIFO)的集合,常用的实现类是Stack。
- Deque(双端队列):可以在两端进行插入和删除操作的队列。常用的实现类有ArrayDeque和LinkedList。
集合的几种排序方式
Section titled “集合的几种排序方式”学生实体类,包含姓名和年龄属性,比较时先按姓名升序排序,如果姓名相同则按年龄升序排序。
实现Comparable
Section titled “实现Comparable”public class Student implements Comparable<Student>{ private String name; private int age; @Override public int compareTo(Student o) { int flag = this.name.compareTo(o.name); if(flag == 0) { flag = this.age - o.age; } return flag; }}//Collections.sort(students);借助Comparator
Section titled “借助Comparator”public class Student { private String name; private int age;}Collections.sort(students, (o1, o2) -> { int flag = o1.getName().compareTo(o2.getName()); if(flag == 0) { flag = o1.getAge() - o2.getAge(); } return flag;});通过Stream
Section titled “通过Stream”借助Stream进行排序,借助Stream的API,底层还是通过Comparable实现的。
public class Student { private String name; private int age;}
// 如果Student实现了Comparablestudents.stream().sorted().collect(Collectors.toList());
// 如果Student没有实现Comparablestudents.stream().sorted((o1, o2) -> { int flag = o1.getName().compareTo(o2.getName()); if(flag == 0) { flag = o1.getAge() - o2.getAge(); } return flag;}).collect(Collectors.toList());遍历的同时如何修改一个List
Section titled “遍历的同时如何修改一个List”普通的fori循环
Section titled “普通的fori循环”public void listRemove() { List<Student> students = this.getStudents(); for (int i=0; i<students.size(); i++) { if (students.get(i).getId()%3 == 0) { Student student = students.get(i); students.remove(student); //做一次i--,避免漏删 i--; } }}public void iteratorRemove() { List<Student> students = this.getStudents(); Iterator<Student> stuIter = students.iterator(); while (stuIter.hasNext()) { Student student = stuIter.next(); if (student.getId() % 2 == 0) { //这里要使用Iterator的remove方法移除当前对象,如果使用List的remove方法,则同样会出现ConcurrentModificationException stuIter.remove(); } }}副本(fail-safe)
Section titled “副本(fail-safe)”public void copyRemove() { // 注意,这种方法的equals需要重写 List<Student> students = this.getStudents(); List<Student> studentsCopy = deepclone(students); for(Student stu : students) { if(needDel(stu)) { studentsCopy.remove(stu); } }}并发安全集合类
Section titled “并发安全集合类”public void cowRemove() { List<String> students = new CopyOnWriteArrayList<>(this.getStudents()); for(Student stu : students) { if(needDel(stu)) { students.remove(stu); } }}Stream
Section titled “Stream”public List<String> streamRemove() { List<String> students = this.getStudents(); return students.stream() .filter(this::needDel) .collect(Collectors.toList());} 发布于 2023-03-01