集合继承结构总结
Iterable
-
"可迭代的"即“可遍历的”,Collection接口的父接口;
Collection
-
集合,接口的一种,Iterable的子类,它包括了对集合的基本操作:对集合的增,删,改,查,判断集合是否为空,获取集合大小(注意,此处不是指集合的容量),遍历等等。
-
常用方法:
-
在集合中增加元素:add()
-
删除某个元素:remove();//底层重写equals方法
-
清空集合中所有元素:clear();
-
判断集合是否为空:isEmpty();
-
返回集合大小:size();
-
判断集合中是否包含某个元素:contains(s);//返回值为true,底层重写了equals方法
-
List
-
Collection的子类,属于接口,其中的元素有序可重复。
-
常用方法:
-
继承Collection类,故同时继承方法
-
异于父类中的方法:
-
indexof():判断集合中某个元素在集合中第一次出现的位置
-
Lastindexof():判断集合中某个元素在集合中最后一次出现的位置。
-
add(String Item,int Index):在指定的位置将指定 的项目添加进入集合
-
get(String Item,int Index):将集合中指定位置的某元素提取出来
-
set(int index,Element);用指定的元素将集合中指定位置的元素替换
-
-
ArrayList
-
List的子类,实现List接口,底层是一个数组(非线程安全)
-
默认初始容量为10
-
扩容后的容量为原容量的1.5倍
-
List查询效率高(数组地址连续,斌且每个数据存储空间大小相同),随机增删效率低(涉及大量数据位移,效率低)。
LinedList
-
List的子类,实现List接口,底层是一个单向链表
-
链表中基本单元为节点(node)
-
对于单向链表,每一个节点都有两个属性:
-
存储的数据
-
下一个节点的内存地址
-
-
对于双向链表
-
上一节点的内存地址
-
data
-
下一节点的内存地址
-
-
由于链表存储数据的内存地址不连续,所以链表的查询效率低,但随机增删效率高。这一点和数组的优缺点刚好相反。
Vector
-
List的子类,实现List接口,底层是一个数组(线程安全)
-
默认初始容量为10。
-
自动扩容之后是原容量的2倍
Set
-
Collection的子类,属于接口,Set集合中的元素无序(输出不一定和输入时一样的顺序,但可以根据大小进行排序)不可重复(输入时有重复的元素,单输出时不重复)
HashSet
-
底层实际上是一个HashMap(即新建一个HashSet集合时,实际上是新建了一个HashMap)
SortedSet
TreeSet
-
TreeSet底层实际上是TreeMap(即新建一个TreeSet对象时,实际上是新建了一个TreeMap对象)
Iterator
-
Iterable接口下的子类,也是一种接口,它是一种迭代器,通过它可以对数组进行遍历。
-
Iterator和Collection是关联关系。
泛型机制
-
泛型:限制集合中只能存放一种类型的元素;
-
解决了大量需强致类型转换的元素;
-
当需要使用反省机制时,在集合后面添加泛型机制即可。
-
泛型可以自定义 Generic<标识符(随意写)>
Map集合
-
Map集合里的元素是以键值对的形式存储
-
用.put()方法向集合里添加元素
-
遍历Map集合当方式:
-
将Map集合里所有的key全部提取出来,返回的是一个Set集合,此时就可以i调用Set集合里的迭代器,通过迭代器遍历key集合,然后通过Map集合中的一个方法.get(key),从而value也取出来了
-
或者直接将Map集合转换成Set集合
-
集合常用方法:
package com.anyan.day07;
import java.util.*;
/**
* @author anyan
* @date 2021/4/11-15:29
*/
public class MapTest03 {
public static void main(String[] args) {
//Map集合常用方法
Map<Integer,String> map=new HashMap<>();//利用多态机制创建Map对象
map.put(1,"I");
map.put(2,"love");
map.put(3,"you");//方法1:put()往集合中存放泛型;注意区别Set集合中的add()方法
Integer integer=map.size();//方法2:得到集合中的元素个数
System.out.println(integer);
//map.remove(2);//方法3:删除集合中的某个元素
Boolean b=map.isEmpty();//方法4:判断集合是否为空
System.out.println(b);
Boolean b2=map.containsKey(2);//方法5:判断集合中是否含有某个key
System.out.println(b2);
Boolean b3=map.containsValue("I");//判断集合中是否含有某个value
System.out.println(b3);
Set<Integer> set=map.keySet();//方法6:取出Map集合中所有的Key组成一个Set集合,故返回值为Set集合;
Collection<String> c=map.values();//方法7:取出Map集合中所有的value,返回值为一个Collection集合;
//map.clear();//方法7:清空Map集合
//遍历Map集合
//方法1:
Set<Integer> set1=map.keySet();
Iterator<Integer> it=set1.iterator();
while(it.hasNext()){
Integer integer1=it.next();
System.out.println(integer1);
}
//方法二:
for(Integer integer1:set1){
System.out.println(integer1);
}
//方法三:将Map集合转换成Set集合
Set<Map.Entry<Integer,String>> set2=map.entrySet();//Map.Entry();Entry是Map集合里的一个静态内部类
Iterator<Map.Entry<Integer,String>> iterator=set2.iterator();
while (iterator.hasNext()){
Map.Entry<Integer,String> me=iterator.next();
System.out.println(me);
}
//方法四:foreach;(效率最高)
for(Map.Entry<Integer,String> me:set2){
System.out.println(me);
}
}
}