java三大集合总结(List、Set、Map)

 java三大集合总结(List、Set、Map)

当前还未总结完毕,后期会持续更新,若有不当之处请评论指出,互相学习。
 

集合具体实现类ArrayListLinkedListVectorHashSetTreeSetHashTableHashMapTreeMap
是否有序有序有序有序无序(底层并非真正的无序,遵循Hash算法来保证数据的存储,但是我们作为使用者,就理解为无序)可自然排序或实现Comparable接口定制排序取出时有散列顺序,无排序无序自动排序
线程安全非安全非安全安全非安全非安全安全非安全非安全
元素可否为null允许允许允许允许不允许键值都不允许键值都允许键允许,值不允许
元素是否可重复可重复可重复可重复不可重复不可重复键不可重复,值可重复键不可重复,值可重复键不可重复,值可重复
操作效率查询快,增删慢查询慢,增删快查询快,增删慢存取速度快性能比HashSet稍差效率比HashMap低通过哈希表内部映射关系快速查找在添加、删除和定位映射关系性能比HashMap稍差
底层、实现数组链表数组  使用了哈希表实现。
  HashSet是通过HashMap实现的,只不过Set用的只是Map的key。
  使用二叉树实现,SortedSet接口的唯一实现类。
  TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key。
  基于Dictionary类。
  哈希表(HashTable)又叫做散列表,是根据关键码值(即键值对)而直接访问的数据结构。映射函数就叫做散列(哈希)函数,存放记录的数组叫做散列表。
  方法中都加入了Synchronize,所以即使多线程也安全。
  存储方式是一个数组结构,数组中的每一项又是一个链表。
  存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
  在Map中插入、删除和定位元素,HashMap 是最好的选择。
  LinkedHashMap是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。 
  方法中都没有Synchronize,所以多线程时不安全。
  实现了SortedMap接口,映射关系有一定的顺序。二叉树。
  TreeMap取出来的是排序后的键值对。但如果要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
遍历for循环  Set<String> set = new HashSet<>();
        set.add("value1");
        set.add("value2");
//遍历方法一,迭代器
Iterator iterator = setExample.iterator();
while (iterator.hasNext()) {
    String value = iterator.next();           
}   
// 遍历方法二
for (String value : set) {
    System.out.println(value);
}
  Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
// 遍历方法一
for (String key : map.keySet()) {
   String value = map.get(key);
}
// 遍历方法二
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
   Map.Entry<String, String> entry = it.next();
   String key = entry.getKey();
   String value = entry.getValue();
}
// 遍历方法三
for (Map.Entry<String, String> entry : map.entrySet()) {
   String key = entry.getKey();
   String value = entry.getValue();
}
 
添加元素函数.add(元素);
--加在集合最后。

.add(数字,元素);
--加载指定的位置。

.addAll(另一个集合名); 
--加在最后。

.addAll(数字,另一个集合名);
--加载指定位置。
  .add(元素);  
--添加指定元素(之前集合不过包含的)
  .put(键,值);
--在此映射中关联指定值与指定键,若该键已经存在,则新元素会替换原来的元素
 
删除元素函数.remove(数字);  
--移去指定位置的元素

.remove(元素);  
--移去集合中第一次出现的指定元素(如果存在)

.removeALL(另一个集合名);
--移去另一个集合中的所有元素

.retaintALL(另一个集合名);
--仅保留另一个集合中的所有元素

.clear();
--清空集合
  .remove(元素);
--移去指定的元素

.clear();
--清空集合
  .remove(键);
--从映射中移除指定键的映射关系(如果存在)
 
其他函数.get(数字);
--获得指定位置的元素

.contains(元素);
--判断集合是否包含该元素,是则返回true

.contains(另一个集合名);
--判断是否包含另一个集合的所有元素

.indexOf(元素);  
--返回该元素的索引,无则返回-1

.equals(元素);
--判断该元素是否与集合的元素一致  返回true或false

.set(数字,元素);
--用该元素替换指定位置的元素

.size();
--获取集合的大小
  .containts(元素);
--如果集合包含此元素,返回true

.size();
--获得集合的大小
  .containsKey(键);
--如果此映射包含对于指定键的映射关系,返回true

.containsValue(值);
--如果此映射将一个或多个键映射到指定值,返回true

.size(); 
--获得集合的大小
 
参考地址     HashTable和HashMap的区别详解 https://www.cnblogs.com/williamjie/p/9099141.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值