javase 集合

集合

javase 集合
集合
collection
list和set集合(泛化关系:is a)
1.list有序可重复
2.set无序不可重复
iterator(关联关系:has a)
实现关系(like a)
list集合:arraylist集合,linkedlist集合,vector
数组(非线程安全)、双向链表、数组(线程安全)
vector(所有的方法都有synchronized,但是效率比较低,现在有别的方法保证线程安全,所以使用较少了)
set集合:hashset,实际上实现了一个hashmap集合,使用了哈希表数据结构
treeset:实际上实现了一个treemap集合,底层使用了二叉树数据结构

map
map一key和value这种键值对的方式存储元素,key和value都是存储java对象的内存地址
hashmap底层是hash表,非线程安全
hashtable也是哈希表,线程安全效率低,现在用的少,因为有更好的方案
treemap

map集合中的key就是一个set集合,往set集合中放数据,实际上是放入了map集合中的key部分

collection

collection集合中的方法
add,添加元素,因为有自动装箱的机制,所以可以加很多种数据类型
size,获取集合中元素的个数
clear,清空集合
contains,是否包含
remove移除

关于集合遍历、迭代
在collection集合类通用(重要)
迭代器方法:hasnext,next
javase 集合
javase 集合

javase 集合
string类的equals方法重写了,比较内容不比较内存地址
contains方法底层调用了equals方法。
放在集合里面的元素要重写equals方法
integer类的equals方法重写了
remove方法调用了equals方法
迭代集合元素过程中,不能调用集合对象的remove删除元素,会出现异常(改变了集合结构,需要重新获取迭代器),集合中元素删除,但是没有更新迭代器
c2.remove()
使用迭代器删除可以吗?
可以(自动更新迭代器和集合)

list

get方法,根据下标获取元素
javase 集合
arraylist集合,底层是object数组,初始容量是10
扩容,增长到原容量的1.5倍
优化:尽可能少的扩容
右移一位等于除以2
优缺点:检索效率高 ,增删元素效率低(不包括数组尾)
集合用啥比较多,是arraylist集合,因为向数组末尾添加元素,不受影响,另外检索元素操作比较多
数组尾部添加元素为什么效率高
不需要遍历,放元素效率较高
链表优缺点:增删元素效率高(因为内存地址不连续,不涉及大量元素位移),查询效率低,需要从头结点遍历

javase 集合
vector
底层也是一个数组
初始容量是10,满了之后扩容,扩容特点是原容量2倍
arraylist集合扩容是原容量1.5倍
vector是线程同步的,线程安全的,效率较低
将arraylist变成线程安全的操作方法
javase 集合

mylist就会变成线程安全的
泛型机制
不用泛型的代码,取出对象之后,需要向下转型

javase 集合

用泛型来指定集合中的数据类型
javase 集合
泛型的缺点:集合中存储的元素缺乏多样性
大多数业务中,集合中元素类型是统一的
但是调用子类型特有的方法,还是需要转型
javase 集合

javase 集合

自定义泛型

hashset集合特点:无序不可重复
存储顺序和取出的顺序不一样
取出来的数值放到key部分了
treeset集合特点无序不可重复,但是可以按照大小排序
从小到大自动排序

map 的方法

上一篇:【JavaSE】【面向对象06】类的五大成员之内部类


下一篇:Android 元素数据的读取