集合
-
Collection接口下的子接口:
List接口
特点:
①、与数组类似,可以动态增长(动态数组); ②、有序,有下标,元素可重复; ③、查找效率高,插入、删除效率低(会引起其他元素位置改变)。
List接口实现类
ArrayList,LinkedList,Stack,Vector
List集合遍历方式
①、普通for循环 //实例化一个集合 List<String> list = new ArrayList<>(); //核心中的核心方法 添加元素 list.add("a1"); list.add("a2"); list.add("a3"); list.add("a4"); //普通for循环 for( int i=0; i< list.size() ; i++ ){ String str = list.get(i);//根据下下标找元素 System.out.println( str ); } ②、增强for循环 //实例化一个集合 List<String> list = new ArrayList<>(); //核心中的核心方法 添加元素 list.add("a1"); list.add("a2"); list.add("a3"); list.add("a4"); // 增强for循环 for( String str1 : list ){ String str = str1; System.out.println(str); } ③、迭代器遍历 //实例化一个集合 List<String> list = new ArrayList<>(); //核心中的核心方法 添加元素 list.add("a1"); list.add("a2"); list.add("a3"); list.add("a4"); // 迭代器 Iterator it = list.iterator(); while (it.hasNext()){ String str = it.next(); System.out.println(str); }
List实现类区别
ArrayList特点
①、ArrayList 它底层依靠数组实现的,使用 Object[] elementData存储数据; ②、查询快,增删慢; ③、默认长度为10,增长方式:新容量 = 旧容量 * 3 / 2 + 1(查看ArrayList类构造方法); ④、ArrayList是线程异步,线程不安全的,多线程环境下不保证数据一致性; ⑤、允许元素为null。
LinkedList 特点
①、链表数据结构 ②、双向链表结构,实现了队列,可当做堆栈、队列或双向队列进行操作; ③、线程异步,线程不安全; ④、查询慢,增删快;
Stack特点
①、后进先出的数据结构
Vector 特点
①、老的动态数组; ②、线程同步,安全,但效率低(一般不赞成使用); ③、默认长度为10,默认每次扩容增长1倍(增长方式:n*2,比较浪费资源)。
Set接口
特点:
①、无序、无下标、元素不可重复
Set接口的实现类
HashSet,LinkedHashSet,TreeSet
Set集合遍历方式
增强for遍历 //无序无下标不可重复 Set<String> sets = new HashSet<>(); sets.add("a1"); sets.add("a2"); sets.add("a3"); sets.add("a4"); for( String obj : sets){ System.out.println(obj); } 迭代器遍历 //无序无下标不可重复 Set<String> sets = new HashSet<>(); sets.add("a1"); sets.add("a2"); sets.add("a3"); sets.add("a4"); Iterator<String> it = sets.iterator(); while ( it.hasNext() ){ String obj = it.next(); System.out.println(obj); }
Set实现类区别
HashSet 特点
①、以哈希表的形式存放元素(底层是哈希表); ②、插入、删除速度很快; ③、元素可以是Null,但只能放一个Null; ④、线程不同步。
LinkedHashSet特点
①、具备先进先出(FIFO)的特点 ②、迭代的顺序就是添加的顺序
TreeSet特点
①、根据某种(规则)对里面的元素进行排序(即具有自动排序功能)。
Queue集合
特点:
①、先进先出(FIFO:First-in,First-out) ②、主要用于存储数据,而不是处理数据。 ③、不能存储null,但LinkedList除外。
Queue接口实现类
①、LinkedList类 ②、PriorityQueu类 ③、Deque接口中的ArrayDeque类
Queue实现类区别
PriorityQueu类
①、实际上是一个堆(不指定Comparator时默认为最小堆); ②、队列既可以根据元素的自然顺序来排序,也可以根据Comparator来设置排序规则; ③、队列的头是按指定排序方式的最小元素。如果多个元素都是最小值,则头是其中一个元素。 ④、队列实现不同步,不是线程安全; ⑤、不允许使用null元素。
Deque接口特点
①、插入、删除、获取操作支持两种形式:快速失败和返回null或true/false ②、既具有FIFO特点又具有LIFO特点,即是队列又是栈 ③、不推荐插入null元素,null作为特定返回值表示队列为空 ④、未定义基于元素相等的equals和hashCode