一、集合
  1. 用于存储类型一致的一组对象的数据结构。
  2. 类似于数组,但是集合提供了操作算法:集合=数据存储+操作算法。集合的用途极其广泛,如歌曲列表,联系人列表对话记录等。
  3. 集合比数组多了操作算法,便于提高编程效率。
  4. collection是一个接口,定义了集合相关的操作方法,其有两个子接口:List(可重复)与Set(不可重复),元素是否重复,取决于元素的equals()比较的结果。
  5. collection方法,集合在判断元素是否被包含在集合中,是根据元素的equals()方法进行比较的结果(o==null?e==null:o.equals(e))。
  6. addAll方法,该方法需要我们传入一个集合,并将该集合中所有元素添加到当前集合中。
  7. containsAll方法,该方法用于判断当前集合是否包含给定集合中的所有元素。
 
二、Iterator
  1. Iterator迭代器,逐一遍历或迭代处理集合中的元素。
  2. 集合提供的算法不能满足业务需要时,使用迭代实现。
  3. Collection定义了iterator方法,用于创建Iterator接口实例,子类实现了这个方法。
  4. Iterator接口一般都是用“内部类”实现的,用i.getClass().getName()可查看。
  5. Iterator是给while()语句定制的。
  6. 迭代期间,不能使用集合方法添加或删除元素,迭代器提供了安全删除方法.remove()。在使用迭代器遍历集合时,不能通过集合的remove方法来删除集合元素,否则会抛出异常。我们可以通过迭代器自身提供的remove()方法来删除,通过next()迭代出元素,这里需要注意的是,在调用remove方法前必须通过迭代器的next()方法迭代过元素,那么删除的就是这个元素,并且不能再次调用remove方法,除非再次调用next()后方可再次调用。
Iterator i = c.iterator();
while(i.hasNext()){
   Sting s = i.next();
}
for(Iterator i = c.iterator();i.hasNext()){
   Sting s = i.next();
}
for(String s : c){
}
 
三、增强型for循环
  1. 语法:for(元素类型 e : 集合或数组){循环体;}
  2. 在编译过程中,编译器将新循环转换为迭代器模式,所以新循环本质上是迭代器。
  3. 只能用于遍历,不能用于更改或删除。
 
四、泛型
  1. Java SE 5.0引入的特性,泛型的本质是参数化类型,在类、接口和方法的定义过程中,所操作的数据类型被传入的参数指定。
 
五、List
  1. List继承了Collection,扩展了与位置有关的操作方法,实现类有两个:ArrayList和LinkedList,外观一致都是List。
  2. 任何时候,需要使用集合,不确定类的时候,首先选择ArrayList。
 
六、ArrayList和LinkedList
  1. ArrayList和LinkedList分别用动态数组和链表的方式实现了List接口。
  2. 可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是性能上有一定差别。ArrayLIst更适合于随机访问,而LinkedList更适合于插入与删除。
  3. ArrayList可以通过下标迅速索引到对应的元素,但在删除或插入时移动较多元素,LinkedList在删除或插入时只需要改变链接“指针”即可实现。
 
七、List转换为数组
toArray()返回值是Object类型,对象的类型是多态的。
  1. 如果列表List能放入指定的数组,则返回放入此列表的元素的数组,否则,将根据指定数组运行时的类型和List的大小分配一个新的数组。
  2. 如果指定的数组足够大,并且剩余空间,那么会将数组中紧跟在集合末尾的元素设为null。
 
八、List的插入与删除以及subList
  1. void add(int index,E element);将给定的元素插入到指定位置,原位置及后续元素都顺序向后移动。
  2. E remove(int index);删除给定位置的元素,并将被删除的元素返回。
  3. subList方法用于获取子List。需要注意的是,subList获取的List与原List占有相同的存储空间,对子List的操作会影响原List。
 
九、数组转换为List
Array.asList(array);
  1. 返回一个受指定数组支持的固定大小的列表(对返回列表的更改会“直写”到数组)。
  2. 返回的List的集合元素类型由传入的数组的元素类型决定。
  3. 返回的集合我们不能对其增删元素,否则会抛出异常。
  4. 对集合元素进行修改,会影响到数组对应的元素。
 
十、List排序
  1. 利用Collection.sort(List),可以对给定的集合元素进行自然排序。
  2. Comparable接口。使用Collections的sort排序的集合元素,都必须是Comparable接口的实现类,该接口表示其子类都是可比较的,因为实现该接口必须重写抽象方法CompateTo(T t);
  3. CompareTo方法。用于使当前对象与给定对象进行比较。若当前对象大于给定对象,那么返回值应为>0的整数;若小于给定对象,那么返回值为<0的整数;若两个对象相等,则应返回0.
 
十一、比较器Comparator
  1. 一旦java类实现了Comparable接口,其比较逻辑就已经确定;如果希望在排序的操作中临时指定比较规则,可以采用Comparator接口回调的方式。
  2. Comparator接口要求实现类必须重写其定义的方法:Compare(T o1,T o2),返回值是>0 <0 =0。
  3. 利用方法Collections.sort(list, 比较器),就可以进行任意规则的排序。
 
十二、队列和栈
  1. Queue,一种特殊的线性表,只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素,遵循先进先出(FIFO)的原则。
  2. LinkedList实现了Queue接口。
  3. Deque是Queue的子接口,定义了所谓“双端队列”,即从队列的两端分别可以入队(offer)或出队(poll),Linkedlist实现了该接口。
  4. 如果将Deque限制为只能从一端入队和出队,则可实现“栈”(stack)的数据结构,对于栈而言,入栈称之为push,出栈称之为pop,栈遵循先进后出(FILO)的原则。
 
十三、Map
  1. Map的方法:put/get/containsKey/keySet/entrySet/clear/size/isEmpty/containsValue/remove
  2. 作为Map中的key,一定要很好地实现equals和hashCode,必须成对实现(就是当两个对象equals相等的时候,一定具有相同的hashCode。
  3. 无论get/put,都是先利用hashCode计算桶的位置,再利用equals比较元素的位置。
  4. 如果hashCode的值不稳定,或没有成对重写,会造成HasMap的工作故障。
  5. Map根据key查找value,key是不可重复的,value可以重复。
  6. Map的常见实现类是散列表HashMap,是散列算法实现的,有极其优秀的查询性能,相对于顺序查询性能优秀。
 
十四、HashMap
  1. 散列表插入过程(put):获得key的hashCode(),利用散列算法映射到散列表数组中“散列桶”的位置,遍历散列桶,使用key.equals()方法逐一比较key,确定位置,添加(替换)数组。
  2. 散列表查找过程(get):根据key查找value(数据),获得key的hashCode(),利用散列算法映射到散列表数组中散列桶的位置,使用key.equals()方法逐一比较key确定位置,获取这个位置的数据(value),如果没有数据,就返回null。
 
十五、装载因子及HashMap优化
  1. 散列表的默认加载因子是75%
  2. 75%是散列表中所有元素数量与散列表容量的最大比值。
  3. 一旦实际的比值超过加载因子,散列表或扩容,并重新散列。
  4. 减少散列表的扩容次数,将有助于提高散列表的性能。
 
十六、Map的遍历
keySet()方法:
将当前Map中所有的key存入一个Set集合后返回
Set<String> keys = map.keySet();
for(String key : keys){
   Object value = map.get(key);
}
entrySet()方法:
将当前Map中每一组key-value对封装为一个Entry对象,并存入一个Set集合后返回
Set<Entry<String,Object>> set = map.entrySet();
for(Entry<String,Object>> e : set ){
   String key = e.getKey();
   Object value = e.getValue();
}
 
十七、LinkedHashMap (有序的HashMap)
  1. LinkedHashMap能够利用链表保持元素的添加顺序,HashMap是散列的顺序不能保持元素顺序。
 
 
 
 

T-4-java核心API-集合类的更多相关文章

  1. Java核心API需要掌握的程度

    分类: java技术2009-08-29 01:03 213人阅读 评论(0) 收藏 举报 javaapiswingxmlio Java的核心API是非常庞大的,这给开发者来说带来了很大的方便,经常人 ...

  2. 2018.6.19 Java核心API与高级编程实践复习总结

    Java 核心编程API与高级编程实践 第一章 异常 1.1 异常概述 在程序运行中,经常会出现一些意外情况,这些意外会导致程序出错或者崩溃而影响程序的正常执行,在java语言中,将这些程序意外称为异 ...

  3. java核心API学习

    1:java.lang  (Object.String.StringBuffer.Thread.System.ClassLoader.Class.Runtime.包装类等)

  4. java核心API

    ---恢复内容开始--- Javase01 day01 关于String: String是不可变对象,java.lang.String使用了final修饰,不能被继承: 字符串一旦创建永远无法改变,但 ...

  5. 【Java核心】ClassLoader原理及其使用

    又把博客的皮肤换了换,看着更加简洁舒心一些.前段的知识只是略懂,拿过来就能用,只是自己的审美和设计水平有限,实在难以弄出自己特别满意的东西,也算是小小的遗憾吧!言归正传,由于最近涉及到Java核心的东 ...

  6. java多线程核心api以及相关概念(一)

    这篇博客总结了对线程核心api以及相关概念的学习,黑体字可以理解为重点,其他的都是我对它的理解 个人认为这些是学习java多线程的基础,不理解熟悉这些,后面的也不可能学好滴 目录 1.什么是线程以及优 ...

  7. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  8. Java Attach API

    catalog . instrucment与Attach API . BTrace: VM Attach的两种方式 . Sun JVM Attach API 1. instrucment与Attach ...

  9. Java核心_内省

    Java核心_内省 查看java的api,发现有一个包java.bean咦,这个包是干什么的呢,原来,它是用来操作JavaBean对象的! 一.内省操作①JavaBean:一种特殊的Java类无参构造 ...

  10. Java核心 --- 注解

    Java核心——注解 注解是jdk5以后的新特性,Spring和Hibernate等框架提供了注解的配置方式使用, 本文参考了浪曦风中叶的注解讲解,主要讲解jdk内置注解的用法,注解的声明和定义,以及 ...

随机推荐

  1. 算法之Python实现 - 001 : 换钱的最少货币数

    [题目]给定数组arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数. [代码1]:时间与额外 ...

  2. elasticsearch增删查改

    创建结构化索引 put http://127.0.0.1:9200/person{ "settings" : { "number_of_shards": 3, ...

  3. sklearn中的SVM

    scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类.另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类 ...

  4. ThingJS平台制作第一人称视角下的巡更效果

    今天想要做一个类似巡更的过程,就像是在学校保安巡更,小区保安巡更一样.巡更需要用到相应的场景,比如说:园区.学校.超市以及工厂等等,然后需要规划好路线也就是巡更的路线,并且视角要跟随路线来变换,从而达 ...

  5. File重要获取功能

    返回值全是数组 String[] list() 返回当前路径下所有的文件和文件夹名称 注:只有指向文件夹的File对象才可以调此方法,如果只是文件则报错 File f = new File(" ...

  6. Java Web解决跨域请求

    要知道跨域请求就要先了解同源策略,那么什么是同源?什么是不同源?简单来说就是,如果两个资源,包括HTML页面.JavaScript脚本.css样式,对应的协议.域名和端口完全相同,那么这两个资源就是同 ...

  7. Earth Wind 一个查看全球风向的网站

    可以查看整个地球的全貌 ,还能定位你的位置,特别是动画挺有意思 网址:https://earth.nullschool.net/#current/wind/surface/level/orthogra ...

  8. js计算日期相减天数

    代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head ...

  9. listview的gridview视图中,获取列中模板内的button按钮(找控件内的控件)

    点击“间隙”,获取“间隙”旁边隐藏的减号按钮(本图片未显示出来) private void TextBlock_MouseDown_2(object sender, MouseButtonEventA ...

  10. commandjs、AMD、CMD之间的故事

    commandjs:同步加载,只运行一次,后面使用第一次加载时运行的结果(存于缓存中),用于服务器 AMD:define(id ?,dependencies ?,factory) 异步加载,用于浏览器 ...