Java集合
数组作为容器,可以存储基本数据类型,也可以存储引用数据类型,数组一旦定义出来,长度就固定了,而且也只能存储引用数据类型,用起来不太方便,需哦一就引出了集合的概念。
集合
集合的长度是可变的,集合中可以存储不同的数据类型,但是集合不能存储基本数据类型
集合中的方法
Collection: 包括 list 和 set
a/添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素)
b/删除功能
void clear():移除所有元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素 ,如果没有交集元素 则删除失败 返回false
c/判断功能
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含 才返回true)
boolean isEmpty():判断集合是否为空
d/获取功能,接口 Iterator<E> 迭代器(可以理解为遍历)
boolean hasNext()
如果仍有元素可以迭代,则返回 true
e/长度功能
int size():元素的个数
g/把集合转换为数组
toArray( ) System.out.println(collection.size());
但是要注意的是通过aslist方法把数组转换成集合后,这个集合就不能再添加元素了
List集合: 包括 ArrayList Vector LinkedList
允许元素重复
void add(int index,E element): 在指定索引处添加元素
E remove(int index):移除指定索引处的元素 返回的是移除的元素
E get(int index):获取指定索引处的元素
E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素
subList(首索引,尾索引),根据首位索引截取集合中的元素
List的三个子类的特点
ArrayList 底层数据结构是数组,增删慢,查询快 线程不同步,数据不安全,效率高
Vector 底层数据结构也是数组,增删慢 查询快 线程同步,数据安全,效率慢
LinkedList 底层数据结构是链表,增删快 查询慢 线程不同步,数据不安全效率高
我们根据需要,如果对数据安全要求较高,建议采用Vector
还要考虑操作中查询多还是增删多
数组特点: 查询快 , 增删慢
链表特点: 查询慢 , 增删快
set接口:包含HashSet LinkedHashSet TreeSet
set集合的特点:元素是无序的,唯一的
HashSet(无序,唯一)
HashSet集合底层结构是哈希表,哈希表底层维护的是数组和链表
HashSet集合靠元素重写hashCode和equals方法来保证元素的唯一性
元素有序靠链表保证
元素唯一靠哈希表保证
如果元素不重写这两个方法,就无法保证唯一性
String和Integer默认重写了hashCode方法和equals方法
接口 Map<K,V>
将键映射到值的对象,一个映射不能包含重复的键,每个键最多映射一个值,K为键。V为值。map集合中,一个键只对应一个值,当键相同时值会覆盖,其中允许使用null键与null值,
map集合的数据结构只和键有关,与值无关
常用方法
HashMap<String, String> hm = new HashMap<>();
String put = hm.put("老大", "呵呵");//添加元素
String put2 = hm.put("张三", "哈哈");//键相同,值覆盖
String put3 = hm.put("张三", "呵呵");//输出结果:张三呵呵
hm.remove("老大");//移除一个键值对
hm.clear();//清空一个集合
boolean b = hm.containsKey("张三");//判断一个集合是否包含指定键
boolean v = hm.containsValue("哈哈");//判断一个集合是否包含指定值
boolean empty = hm.isEmpty();//判断一个集合是否为空
类 HashMap<K,V>
允许插入null键和null值
HashMap和Hashtable的区别:
HashMap: 非同步,线程不安全,效率高.允许null值和null键
Hashtable: 同步,线程安全 , 效率低.不允许null值和null键 |
|