一、数组

  1. 容器类只能保存对象的引用。而数组可以像保存对象的引用一样,直接保存基本类型。与包装过的基本类型的容器相比,创建与访问一个基本类型的数组效率更高。
  2. Java允许直接“返回一个数组”。不需要担心要为数组负责,当使用完后,垃圾回收器负责清理。
  3. 填充数组:方法fill()只能以某个单一的值填充整个数组,如果想用随机生成的若干数字填充数组,fill()就无能为力了。
  4. 复制数组:System.arraycopy() ,复制数组比用for循环复制要快多。System.arraycopy()为所有类型作了重载。
  5. 数组比较:Arrays类重写了equals()方法,用来比较整个数组(包括基本类型与Object)。数组相等的条件:数组元素个数必须相等,并且对应位置的元素也相等。可以通过对每一个元素使用equals()做比较来判断。
  6. 数组元素的比较:Java提供了比较功能,主要是实现java.lang.Comparable接口。此接口很简单,只有compareTo()一个方法。此方法以要比较的Object为参数,如果当前对象小于参数则返回负值,如果相等则返回0,如果当前对象大于参数则返回正值。
  7. 数组排序:使用内置的排序方法,就可以对任意的基本类型数组排序,也可以对任意的对象数组进行排序,只要该对象实
    现了Comparable接口或具有相关联的Comparator。
  8. 二分查找:如果数组已经排好序了,就可以使用Arrays.binarySearch()执行快速查找。不要对未排序的数组使用binarySearch(),否则结果不可预料(二分法查找)。如果使用Comparator对对象数组排序(基本类型数组无法使用Comparator进行排序),再使用binarySearch()时必须提供同样的Comparator (使用此方法的重载版本)。

二、容器
ArrayList是一种List,而HashSet是一种Set。HashMap是一种Map,与数组不同。
List按对象进入的顺序保存对象,不做排序或编辑操作。
Set对每个对象只接受一次,并使用自己内部的排序方法。
Map同样对每个元素只保存一份,但这是基于“键”的,Map也有内置的排序,因而不关心元素添加的顺序.

  1. Collection接口及操作
    1.1基本操作的方法有
    size()
    isEmpty()
    contains()
    add()
    remove()
    iterator() //转换
    1.2 批量操作
    containsAll(Collection):返回集合中是否
    包含指定集合中的所有元素;
    addAll(Collection)方法和removeAll(Collection)方法:将指定集合中的元素添加到集合中和从集合中删除指定的集合元素;
    retainAll(Collection)方法:删除集合中不属于指定集合中的元素;
    clear()方法删除集合中所有元素。
    1.3 数组操作
    toArray()方法可以实现集合与数组的转换
    无参数的toArray()方法实现将集合转换成Object类型的数组。
    有参数的toArray(Object[] a)方法将集合转换成指定类型的对象数组。
  2. 容器元素的访问
    2.1迭代器
    迭代器是一个对象,它的工作是遍历并选择序列中的对象. Java的Iterator是受限制的,它只能用来:
    使用方法iterator()要求容器返回一个Iterator.第一
    次调用Iterator的next()方法时,它返回序列的第一
    个元素.
    使用next()获得序列中的下一个元素.
    使用hasNext()检查序列中是否还有元素.
    使用remove()将上一次返回的元素从迭代器中移除.
 Iterator it = c.iterator(); //得到迭代器对象
while (it.hasNext()){ System.out.println(it.next());
}

2.2 foreach

for (Object o : collection) System.out.println(o);
  1. List的功能方法
    可以使用add()添加对象,使用get()一次取出一个元素
    有两种List:
    一种是基本的ArrayList,其优点在于随机访问元素。
    另一种是更强大的LinkedList,它并不是为快速随机访问设计的,它对顺序访问进行了优化,向List中间插入与删除的开销并不大,而随机访问则相对较慢。LinkedList还具有下列方法:addFirst()、addLast()、getFirst()、getLast()、removeFirst()和removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

  2. Set的功能方法
    Set具有与Collection完全一样的接口。但是Set不保存重复的元素。
    HashSet*——为快速查找设计的Set,存入HashSet的对象必须定义hashCode().
    TreeSet——保持排序的Set,底层为树结构。使用它可以从Set中提取有序的序列).
    LinkedHashSet ——具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示,同样必须定义hashCode().
    使用SortedSet接口(TreeSet是其唯一的实现),可以确保元素处
    于排序状态,还可以使用SortedSet接口提供的附加功能。

  3. Map的功能方法
    Map接口是“使用一个对象来查找另一个对象” :
    方法put(Object key, Object value)添加一个“值”(value)(想要的东西)和与“值”相关联的“键”(key)(使用它来查找)。
    方法get(Object key)返回与给定“键”相关联的“值”。
    可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。
    标准的Java类库中包含了几种不同的Map:
    l HashMap* l TreeMap
    l LinkedHashMap
    l WeakHashMap
    l IdentityHashMap
    5.1
    使用SortedMap接口(TreeMap是其唯一的实现),可以确保
    “键”处于排序状态,这使得它具有额外的功能,这些功能由
    SortedMap接口中的方法提供。
    5.2
    为了提高速度,LinkedHashMap散列化所有的元素,但是在遍历“键值对”时,又以元素的插入顺序返回“键值对”。
    可以在构造器中设定LinkedHashMap,使之采用基于访问的“最近最少使用”(LRU)算法,使得没有被访问过的(可被看作需要删除的)元素出现在队列的前面.
    5.3
    HashMap的性能因子
    容量(Capacity)——散列表中桶的数量.
    初始化容量(Initial capacity):创建散列表时桶的数量(16)。HashMap和HashSet都允许在构造器中指定初始化容量。
    尺寸(Size):当前散列表中记录的数量。
    负载因子(Load factor):等于“size/capacity”。默认的负载因子为0.75.

三、选择接口的不同实现

  1. 对List的选择:
    对于随机访问(get()),ArrayList的开销小于LinkedList。
    从中间的位置插入和删除元素,LinkedList要 比ArrayList(需移动)快,特别是删除操作。
  2. 对set的选择
    HashSet*的性能总是比TreeSet好(特别是最常用的添加和查询元素操作)。
    TreeSet存在的唯一原因是,它可以维持元素的排序状态。所以,只有当你需要一个排好序的Set时,才应该使用TreeSet。
    对于插入操作,LinkedHashSet比HashSet略微慢一点;这是由维护链表所带来额外开销造成的。不过,因为有了链表,遍历LinkedHashSet会更快。
  3. 对Map的选择:
    Hashtable和HashMap(替代)的效率大致相同。
    TreeMap通常比HashMap慢。但可以使用它生成一个排好序的队列。
    LinkedHashMap比HashMap慢一点。

【Java容器】Java容器入门教程相关推荐

  1. Arthas(1):Java诊断工具Arthas入门教程

    文章目录 前言 第一节 Arthas 能为你做什么? 第二节 环境准备 第三节 快速入门 1. 启动math-game 2. 启动arthas 3. 查看dashboard 4. 通过 thread ...

  2. java springboot整合zookeeper入门教程(增删改查)

    java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...

  3. (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务...

    http://blog.csdn.net/zixiao217/article/details/53044890 读完第一节,我们已经对Quartz有了一个大体的认识,它可以定时帮我们执行一些处理程序, ...

  4. 学编程语言C/C++、Java、Python的入门教程都在这里

    ​ 前言 经常有小伙伴在群里问我:新手学编程有什么好的视频教程可以推荐? 问完后,他们经常会很含蓄的补充一句:要白嫖的! 好吧,能理解! 毕竟大多数学生党还是在靠家里支助,能白嫖的情况下,都会想着尽量 ...

  5. 学生党必看!C/C++、Java、Python的入门教程都在这里,能让你省下好几万的学费!

    ​ 前言 经常有小伙伴在群里问我:新手学编程有什么好的视频教程可以推荐? 问完后,他们经常会很含蓄的补充一句:要白嫖的! 好吧,能理解! 毕竟大多数学生党还是在靠家里支助,能白嫖的情况下,都会想着尽量 ...

  6. 从零开始学习 webservice第一集,java webservice简单实例入门教程

    现在从零开始学习webservice 概念自己百度搜,总之,webservice就相当于一个接口,就像你走进了一家售货店,你不需要知道这家店怎么卖给你东西,你拿着钱去,说我要一包玉溪,人家就会给你返回 ...

  7. idea没有out文件夹_史上最详细没有之一的 Java JNI傻瓜级入门教程

    本文使用java的IDEA和visual studio2017来详细的一步一步演示java的JNI构建过程(eclipse+vs2017的教程在文末) 1.打开java的IDEA,file->n ...

  8. (转)Java任务调度框架Quartz入门教程指南(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例...

    http://blog.csdn.net/zixiao217/article/details/53075009 Quartz的主要接口类是Schedule.Job.Trigger,而触发器Trigge ...

  9. (转)Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail...

    http://blog.csdn.net/zixiao217/article/details/53053598 首先给一个简明扼要的理解: Scheduler 调度程序-任务执行计划表,只有安排进执行 ...

  10. 【Java提升】设计模式入门教程 工厂模式

    工厂模式是平时开发过程中最常见的设计模式.工厂模式解决类的实例化问题,它属于创建型模式.工厂模式也经常会和其他设计模式组合使用. 试想你去麦当劳买一个汉堡.你只需要告诉收银员要一个xx汉堡.过一会就会 ...

最新文章

  1. [C#][EF] 添加表添加不进来
  2. QT中事件发送函数sendEvent()、postEvent()详解
  3. [转]使用 LDAP 组或角色限制访问,包含部分单点登录SSO说明
  4. 洛谷 3381 【模板】最小费用最大流
  5. 6-7 jmu-Java-07多线程-Thread (3分)
  6. PostgreSQL 9.5 pg_dump新特性 你是我的眼
  7. 浙江大学_包家立教授计算生物学2_信源编码理论
  8. Java之品优购课程讲义_day12(2)
  9. pandas.Series.values
  10. HDU 1995 R-汉诺塔V
  11. BP神经网络算法基本原理,基于bp的神经网络算法
  12. SpringMVC工作原理(含案例图解)
  13. 小米 12S Utra 莱卡水印生成在线工具
  14. 光栅渲染器(二)画线
  15. python微博评论情感分析_用python对鹿晗、关晓彤微博进行情感分析
  16. 图解网络硬件 资料分享
  17. 测试oschina
  18. [修改 Mysql5.7密码策略]Your password does not satisfy the current policy requirements
  19. 北海道看雪(攻略及摄影)
  20. mybatis批量入库

热门文章

  1. hadoop学习路线路线
  2. Java中的枚举类是什么?enum关键字怎么使用?
  3. java中print()和println()的区别
  4. SQL server数据库常用代码大全
  5. 简单数据类型、复杂数据类型
  6. 快手小店通效果好吗?
  7. 使用HttpClient下载图片常用代码,以及下载失败原因
  8. standard、singleTop、singleTask和singleInstance原理分析
  9. intell idea 快速启动设置
  10. muduo学习笔记:net部分之实现TCP网络编程库-Buffer