JAVA基础之集合

128 阅读4分钟

集合

集合与数组的区别

image-20230117115707233

image-20230117115737676

集合框架体系(常用的一些集合类)

image-20230117115848223

image-20230117115922497

Collection接口

collection接口实现类的特点

image-20230117120116165

collection类常用方法

  1. add:添加单个元素

  2. remove:删除指定元素

  3. contains:查找元素是否存在

  4. size:获取元素个数

  5. isEmpty :判断是否为空

  6. clear:清空

  7. addAll:添加多个元素(一个集合)

  8. containsAll:查找多个元素是否都存在

  9. removeAll:删除多个元素

collection接口遍历元素的方法

​ 一.使用迭代器(iterator)

​ 1.基本介绍和执行原理

image-20230117121646205

注意:在调用next()方法前要用hasNext()方法进行判断是否存在下一个元素,否则会抛出异常。

​ 2.使用案例image-20230117121903939

注意:如果第一次遍历后想要再次遍历,需要重置迭代器。

二,使用增强for循环遍历image-20230117122037054

Collection接口的实现类

List接口

基本介绍

image-20230118100851186

List接口的常用方法

1.add:加入一个元素或者按索引插入一个元素

2.boolean addAll(int index, Collection eles):从 index 位置开始将 eles 中的所有元素添加进来

3.Object get(int index):获取指定 index 位置的元素

4.int indexOf(Object obj):返回 obj 在集合中首次出现的位置

5.int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置

6.Object remove(int index):移除指定 index 位置的元素,并返回此元素

7.Object set(int index, Object ele):设置指定 index 位置的元素为 ele , 相当于是替换

8.List subList(int fromIndex, int toIndex):返回从 fromIndex 到 toIndex 位置的子集合

遍历方法

Collection中的两种以及普通for循环(通过索引)

List接口实现类

ArrayList
注意事项

image-20230118101600907

底层操作机制

image-20230118101649001

Vector
基本介绍

image-20230118101827000

Vector和ArrayList的比较

image-20230118101945270

LinkedList
全面说明

image-20230118102126093

底层操作机制

image-20230118102209689

image-20230118102217851

ArrayList和LinkedList的比较

image-20230118102302272

Set接口

Set接口基本介绍

image-20230118102408767

Set接口的常用方法

和 List 接口一样, Set 接口也是 Collection 的子接口,因此,常用方法和 Collection 接口一样

Set方法的遍历方法

image-20230118102513824

Set接口实现类

HashSet
全面说明

image-20230118102623058

底层操作机制

image-20230118102923675

image-20230118102907520

LinkedHashSet
全面说明

LinkedHashSet是HashSet的子类

image-20230118103020106

image-20230118103059284

HashSet和TreeSet分别如何实现去重的?

image-20230118214533725

注意:使用TreeSet加入对象时,如果没有使用匿名对象类传入一个Comparator,则该对象所属类必须实现了Compareable接口,否则编译器会报错。

Collection工具类

基本介绍

image-20230118205444392

排序操作

image-20230118205511124

查找,替换

image-20230118205554167

Map接口

Map接口实现类的特点

image-20230117202732272

image-20230117210503228

8)的解读:将Node对象封装到Entry中(Entry指向Node对象,因为Node实现了Entry接口),再将Entry放到EntrySet中,这样便于遍历。同时还有KeySet(Set类型)存储了Key,values(collection类)存储了Value。都是指向某个对象而不是值相同。

注: 1.HashSet中的value为一个固定值。

​ 2.Node为HashMap静态内部类。

Map接口实现类的常用方法

key就是 ’键‘

image-20230117210335155

注意: 1.当key相同时,put会将Values进行替换

​ 2.get根据key返回相应的Values

Map接口的六种遍历方式

第一组: 先取出 所有的 Key , 通过 Key 取出对应的 Value

Set keyset = map.keySet();

(1) 增强 for

System.out.println("-----第一种方式-------");

for (Object key : keyset) {

System.out.println(key + "-" + map.get(key));

}

(2) 迭代器

System.out.println("----第二种方式--------");

Iterator iterator = keyset.iterator();

while (iterator.hasNext()) {

Object key = iterator.next();

System.out.println(key + "-" + map.get(key));

}

第二组: 把所有的 values 取出

Collection values = map.values();

//这里可以使用所有的 Collections 使用的遍历方法

(1) 增强 for

System.out.println("---取出所有的 value 增强 for----");

for (Object value : values) {

System.out.println(value);

}

//(2) 迭代器

System.out.println("---取出所有的 value 迭代器----");

Iterator iterator2 = values.iterator();

while (iterator2.hasNext()) {

Object value = iterator2.next();

System.out.println(value);

}

第三组: 通过 EntrySet 来获取 k-v

Set entrySet = map.entrySet();// EntrySet<Map.Entry<K,V>>

//(1) 增强 for

System.out.println("----使用 EntrySet 的 for 增强(第 3 种)----");

for (Object entry : entrySet) {

//将 entry 转成 Map.Entry

Map.Entry m = (Map.Entry) entry;

System.out.println(m.getKey() + "-" + m.getValue());

}

//(2) 迭代器

System.out.println("----使用 EntrySet 的 迭代器(第 4 种)----");

Iterator iterator3 = entrySet.iterator();

while (iterator3.hasNext()) {

Object entry = iterator3.next();

//System.out.println(next.getClass());//HashMap$Node -实现-> Map.Entry (getKey,getValue)

//向下转型 Map.Entry

Map.Entry m = (Map.Entry) entry;

System.out.println(m.getKey() + "-" + m.getValue());

}

Map接口实现类

HashMap类

基本介绍

image-20230117221013661

底层操作机制

image-20230118111654257

image-20230118111722489

HashTable

基本介绍

image-20230118111927090

底层操作机制

image-20230118113308961

HashMap和HashTable比较

image-20230118204620379

Properties

基本介绍

image-20230118204924815

使用与HashTable基本一致

TreeSet和TreeMap

使用基本与HashSet和HashMap一致,区别在于创建对象时可以通过构造器传入一个匿名内部类Comparato实现自定义排序。

开发中如何选择集合

image-20230118204708354

错题

image-20230118220213840