1.集合树状:

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
│├HashSet
│├TreeSet
│├LinkedHashSet
 
Map
├Hashtable
├HashMap
└WeakHashMap
 

2.Collection接口

Collection是最基本的集合接口,一个Collection代表一组object,java jdk不提供collection的实现类,提供了子接口set和list的实现类。所以的collection都提供了一个无参和有参的构造函数,无参即构造一个空的集合,有参则根据大小创建集合。无论Collection的实际类型是什么,它都支持iterator()方法,该方法返回一个迭代器对象,能逐一访问collection里的每一个元素。用法如下:
Iterator it = collection.iterator(); // 获得一个迭代器
    while(it.hasNext()) {
      Object obj = it.next(); // 得到下一个元素
    }
虽然实现类都是实现了set list map接口,但是大多数方法已经在Collection接口里。所以可以这样写
Collection collection = new ArrayList(); 好处在于你转LinkedList的时候不需要修改arraylist的特性方法。还有就是不明确使用哪个集合的时候。
常用方法:
add(E e) // 添加元素,返回Boolean
addAll(Collection<? extend E>) // 可以添加E的子类集合
clear() // 移除所有的元素
contains(object o) // 是否包含某个元素
size() // 集合大小
remove(); //移除某个元素。
 

3.set list map 的具体实现类

 

接口     实现     历史集合类

Set      HashSet
      TreeSet
List     ArrayList     Vector
      LinkedList     Stack
Map      HashMap     Hashtable
      TreeMap      Properties
 

Set:

Set 接口 不允许存在重复的元素,原始方法都是现成的,没有引入新的方法,set实现类依赖添加的对象的equals()和hashcode方法方法来检查是否等同性;
 
set主要两个实现类HashSet和TreeSet
 
考虑到效率,添加到 HashSet 的对象需要采用恰当分配散列码的方式来实现hashCode() 方法。虽然大多数系统类覆盖了 Object 中缺省的 hashCode()实现,但创建您自己的要添加到 HashSet 的类时,别忘了覆盖 hashCode()。
 
当你需要集合按一定顺序排列的话使用TreeSet,但是添加的时候效率低于HashSet,一般的做法是先用HashSet存储,完成之后再转成TreeSet
 

list:

list接口允许存在重复的元素。
List 接口在 iterator、add、remove、equals 和 hashCode 方法的协定上加了一些其他约定,超过了 Collection 接口中指定的约定。为方便起见,这里也包括了其他继承方法的声明
最常用的两个实现类ArrayList 和LinkedList 前者基于线性表实现,后者基于链表实现。区别在于:
LinkedList 插入快,读慢
ArrayList 读快,插入慢
 

set和list区别

Collection是集合接口
    |————Set子接口:无序,不允许重复。
    |————List子接口:有序,可以有重复元素。
    区别:Collections是集合类
    Set和List对比:
    Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
    List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
    Set和List具体子类:
    Set
     |————HashSet:以哈希表的形式存放元素,插入删除速度很快。
    List
     |————ArrayList:动态数组
     |————LinkedList:链表、队列、堆栈。
    Array和java.util.Vector
    Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。
 
 

Map:

Map 接口不是 Collection 接口的继承。而是从自己的用于维护键-值关联的接口层次结构入手。按定义,该接口描述了从不重复的键到值的映射。
主要实现类是:HashMap linkedHashMap treeMap hashTable
常用的方法:
Object put(Object key, Object value)返回值是被替换的值。
Object remove(Object key)
void putAll(Map mapping)
void clear()
Object get(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
 
因为映射中键的集合必须是唯一的,用 Set 支持。因为映射中值的集合可能不唯一,用Collection 支持。最后一个方法返回一个实现 Map.Entry 接口的元素 Set。
Map.Entry 接口
Map 的 entrySet() 方法返回一个实现Map.Entry 接口的对象集合。集合中每个对象都是底层 Map 中一个特定的键-值对。

HashMap 类和 TreeMap 类

在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按顺序遍历键,那么TreeMap 会更好。根据集合大小,先把元素添加到 HashMap,再把这种映射转换成一个用于有序键遍历的 TreeMap 可能更快。
为了优化 HashMap 空间的使用,您可以调优初始容量和负载因子。这个TreeMap 没有调优选项,因为该树总处于平衡状态。
HashMap与HashTable有什么区别?对比Hashtable和HashMap
  HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。
   HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。
   HashMap不是同步的,而Hashtable是同步的。
   迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。
 

总结:

    掌握每个集合的特性和实现方式,将帮助你在实际开发中有着更明确的选择。
 
 
 
 
 
 
 
 

java 集合基础(适用单线程)的更多相关文章

  1. Java 集合基础详细介绍

    一.Java集合框架概述 集合.数组都是对多个数据进行存储操作的结构,简称Java容器.此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt, .jpg, .avi,数据库中).Jav ...

  2. Java 集合基础知识 List/Set/Map

    一.List Set 区别 List 有序,可重复: Set 无序,不重复: 二.List Set 实现类间区别及原理 Arraylist 底层实现使用Object[],数组查询效率高 扩容机制    ...

  3. Java 集合基础入门,看这篇就够了

    集合 1.父接口:Collection java.util.Collection 是进行单对象保存的最大父接口,即每次利用 Collection 接口都只能保存一个对象信息.定义如下: public ...

  4. java集合基础

    集合概念与作用 1现实生活中把很多事物凑在一起就是集合.java中的集合类:是一种工具,就像是容器,存储任意数量的有共同属性的对象. 2在类的内部,对数据进行组织: 简单而快速的搜索大数量的条目 有的 ...

  5. java集合基础篇 简单总结

    昨天晚上看了编程思想4的持有对象,所以把学到看到的一些记记背背的方面给总结一下. java的容器主要分为两类,一个是实现了接口Collection的一类,还有一个是实现了Map接口的一类. 继承Col ...

  6. Java基础19:Java集合框架梳理

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  7. Java Properties集合基础解析

    Java Properties集合基础解析 本期学习的properties集合是项目中经常用到的操作 什么是Properties集合? java.util.Properties集合继承于Hashtab ...

  8. 基础篇:JAVA集合,面试专用

    没啥好说的,在座的各位都是靓仔 List 数组 Vector 向量 Stack 栈 Map 映射字典 Set 集合 Queue 队列 Deque 双向队列 关注公众号,一起交流,微信搜一搜: 潜行前行 ...

  9. [ Java学习基础 ] Java的对象容器 -- 集合

    当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入.使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找.在计算机中管理对象亦是如此,当获得多个对象后,也需要一个容器将它们管理起来,这 ...

随机推荐

  1. 个人智能家居系统 - MQTT服务器搭建(centOS7.3)

    个人智能家居系统 - MQTT服务器搭建(centOS7.3) 0x00 参考 在CentOS7 上安装mosquitto1.4.1服务器,实现MQTT信息推送功能并增加websocket功能 mos ...

  2. Protobuf(一)——Protobuf简介

    Protobuf简介 ​ 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: ​ Google Protocol Buffer( 简称 Proto ...

  3. jquery.fancybox.js 解决只加载一次的问题

    问题描述:有一块图片区域,页面第一次加载的时候jQuery(".fancybox-button").fancybox({}); 使用ajax上传成功后显示在图片区域,再次jQuer ...

  4. update_all_fun(send recv)

    '''Send messages through all edges >>> update all nodes.DGLGraph.update_all(message_func='d ...

  5. vi编辑器的快捷键汇总

    光标控制命令 本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027& ...

  6. 模块打包 webpack

    1.模块打包工具 2.工作方式: 1)将存在依赖关系的模块按照特定规则合并为单个JS文件,一次全部加载进页面中 2)在页面初始时加载一个入口模块,其他模块异步的进行加载 3.优势: 1)支持AMD,C ...

  7. 【UOJ#349】[WC2018] 即时战略

    题目链接 题意 一开始已知一号点. 每次可以选定一个已知点和一个未知点,然后交互库会返回从已知点出发到达未知点路径上的第二个点. 要求在有限步之内知道每一个点. 次数要求: 链的情况要求 \(O(n) ...

  8. Python---进阶---logging---装饰器打印日志2

    ### logging - logging.debug - logging.info - logging.warning - logging.error - logging.critical ---- ...

  9. Python---进阶---常用模块os、jso

    一.写一个6位随机验证码程序(使用 random模块),要求验证码中至少包含一个数字.一个小写字母.一个大写字母 import randomimport string #help(string) co ...

  10. Centos logrotate截断tomcat日志文件

    1. 设置logrotate轮转日志文件 tomcat日志目录:/usr/local/tomcat/apache-tomcat-8.5.34/logs /etc/logrotate.d/目录下创建to ...