一、简介
Java集合框架是Java编程语言中用于存储和操作数据的一种结构,它提供了一套统一的接口,用于处理各种类型的数据,如数组、列表、队列、栈等,Java集合框架主要包括两种类型的容器:Collection和Map,Collection用于存储一组不唯一的对象,而Map用于存储具有映射关系的对象,Java集合框架的设计目标是提供高性能、高可用性和可扩展性的数据结构。
二、集合框架的层次结构
Java集合框架的层次结构如下:
1、根接口:Collection
2、根接口:Map
3、子接口:List、Set、Queue、Deque
4、实现类:ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet、PriorityQueue、ArrayDeque、LinkedBlockingDeque等
5、实现类:HashMap、LinkedHashMap、TreeMap等
6、工具类:Collections、Arrays等
三、Collection接口
Collection接口是Java集合框架的核心接口,它定义了一组通用的操作方法,如添加元素、删除元素、获取元素等,Collection接口的主要实现类有List、Set和Queue。
1、List接口:List是一个有序的集合,可以包含重复的元素,常用的实现类有ArrayList和LinkedList。
2、Set接口:Set是一个无序的集合,不允许包含重复的元素,常用的实现类有HashSet和LinkedHashSet。
3、Queue接口:Queue是一个队列,用于存储按照先进先出(FIFO)原则排列的元素,常用的实现类有LinkedList、ArrayDeque和LinkedBlockingDeque。
四、Map接口
Map接口是一个键值对映射的集合,它将键(Key)映射到值(Value),Map接口的主要实现类有HashMap、LinkedHashMap和TreeMap。
1、HashMap:基于哈希表实现的Map,查询速度快,但排序功能较差。
2、LinkedHashMap:继承自HashMap,增加了顺序访问功能,记录插入顺序或访问顺序。
3、TreeMap:基于红黑树实现的Map,按键的自然顺序或自定义比较器进行排序。
五、常用集合类的方法
1、ArrayList:基于动态数组实现的List,支持随机访问,查询速度快,插入和删除速度较慢,常用方法有add(E e)、remove(Object o)、get(int index)、size()等。
2、LinkedList:基于双向链表实现的List,支持双向遍历,插入和删除速度快,查询速度较慢,常用方法有addFirst(E e)、addLast(E e)、removeFirst()、removeLast()等。
3、HashSet:基于哈希表实现的Set,不允许重复元素,查询速度快,添加和删除速度较慢,常用方法有add(E e)、remove(Object o)、contains(Object o)等。
4、LinkedHashSet:继承自HashSet,增加了顺序访问功能,记录插入顺序或访问顺序,常用方法同HashSet。
5、TreeSet:基于红黑树实现的Set,不允许重复元素,按键的自然顺序或自定义比较器进行排序,常用方法有add(E e)、remove(Object o)、first()、last()等。
6、HashMap:基于哈希表实现的Map,查询速度快,但排序功能较差,常用方法有put(K key, V value)、get(Object key)、size()等。
7、LinkedHashMap:继承自HashMap,增加了顺序访问功能,记录插入顺序或访问顺序,常用方法同HashMap。
8、TreeMap:基于红黑树实现的Map,按键的自然顺序或自定义比较器进行排序,常用方法有put(K key, V value)、get(Object key)、firstKey()、lastKey()等。
六、集合类的使用示例
1、ArrayList的使用示例:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Hello"); list.add("World"); list.add("!"); System.out.println("ArrayList: " + list); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); if (element.equals("!")) { iterator.remove(); } } System.out.println("After remove '!': " + list); } }
2、LinkedList的使用示例:
import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; public class LinkedListDemo { public static void main(String[] args) { List<String> list = new LinkedList<>(); list.add("Hello"); list.add("World"); list.add("!"); System.out.println("LinkedList: " + list); Queue<String> queue = new LinkedBlockingDeque<>(list); // 转换为阻塞队列,支持多线程操作 try { TimeUnit.SECONDS.sleep(1); // 模拟耗时操作 } catch (InterruptedException e) { e.printStackTrace(); } queue.poll(); // 移除并返回队首元素,如果队列为空则返回null或抛出异常 System.out.println("After poll(): " + queue); // [World, !] -> [!] -> [] } }
3、HashSet的使用示例:
import java.util.HashSet; import java.util.Set; import java.util.TreeSet; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.Collections; import java.util.stream.Collectors; import java.util.stream.Stream; import javafx.util.Pair; // JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair类。// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair类。// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair类。// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair类。// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair类。// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair类。// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair类。// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair类。// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair对象// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair对象// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair对象// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair对象// JavaFX库中的Pair类,用于表示键值对,需要导入该库才能使用Pair类和静态方法of()创建Pair对象。如果不需要使用Pair类,可以使用自定义的键值对类替换Pair对象// Java
还没有评论,来说两句吧...