java集合

121 阅读3分钟

集合

java容器(存储数据,参数必须是引用类型)

引用类型:

数组

接口

对象:String类(字符串是string的对象);自定义类:自定义类的对象;基本类型的包装类;

image.png

collection

单列集合顶层接口为collection,里面定了所有单列集合共性方法

image.png

List

线性存储 元素可重复、元素有序。

Arraylist是list的动态数组实现(查询快增删慢)

Linked list是list的(双向)链表实现(查询慢增删快)

List特有的方法

image.png

 

Set

元素无序(即存取顺序不一致)不重复

Hashset  treeset(平衡二叉树,元素排序非空)

HashSet (哈希值是由真正的地址值得来的,通过一种散列算法(哈希算法)处理得到)存入元素时,先调用存入元素的hashcode()获得对象的哈希值,然后根据哈希值计算出一个存储位置,若该位置没有元素,则直接将该元素存入,若有其他元素,则调用equlas()让存入的元素依次和该位置元素比较,返回结果为false就存入集合,反之抛弃;

给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一

Hashset底层就是hashmap  ,只是hash元素就用了key value为空

image.png

HashSet集合存储数据的结构(哈希表查询快):不重复无索引无序 JDK1.8中,哈希表存储采用数组+链表+红黑树实现。 存储数据到集合时,先计算元素哈希值,根据哈希值分类,相同的是一组;数组一个索引处存放的是哈希值一样 链表或者红黑树把哈希值一样的连接到一起在一个数组索引下,链表长度超过8就用红黑树没超8用链表; )

Treeset不存null因为再重写compare方法时会调用属性会报错

treeset集合调用默认构造创建对象时比较调用compareto(),因此存储的对象要实现comprable接口

treeset使用含参构造(参数传比较器)

image.png

Map

entry对象,键值对对象 hashmap允许为null可以作为键和值

键值对key-valye)key不重复value可重复

一一对应意思是1可以对应w,2也可以对应w但不可以1对应q又对应w; 

Map接口中有一个内部接口Entry:当map集合一创建就会在map集合中创建Entry对象记录键值

map接口方法(key没有对应的values返回null)   

image.png

遍历方法(map的key或者value转换成set集合遍历):

1先把key值取出来,再通过get取value

2遍历set中的每一个entry对象,通过entry对象的getkey()getvalue()方法

Set<String> keys=map.keySet();
    for(String key:keys){
        System.out.println(key+"-----"+map.get(key));
    }
    Collection<String> values=map.values();
    for(String value:values){
        System.out.println(value);
    }
   Set<Map.Entry<String,String>> set=map.entrySet();
for(Map.Entry<String,String> entry:set){
   System.out.println(entry.getKey()+"~~"+entry.getValue());
}

Hashset hashmap存储自定义类型:必须重写equal和hashcode方法

遍历

迭代器,增强for(所有的单列集合都可以使用增强for)

迭代器

迭代:对过程的重复;

迭代器是遍历collection集合,也可在遍历同时添加,删除

迭代器 it 的两个基本操作是 next 、hasNext 和 remove。

hasNext() 用于检测集合中是否还有元素。

调用 it.remove() 将迭代器返回的元素删除。

image.png

image.png

增强for:

格式:for(数据类型 变量名:数组/collection集合对象){    函数体   }

原理:内部就是iterator迭代器(遍历不可以增删)