List,Set,Map学习笔记(1)
来源:互联网 发布:cf修复软件 编辑:程序博客网 时间:2024/06/04 18:14
最近自己研究了下jdk中set,list和map的底层源码,虽然有一些不太清楚,但是我会尽量全的分析每个方法的功能:
List:对于list的认识我是停留在集合上,也就是说,list是继承了collection接口的,作为list的父类,先简单介绍下这样理解起来好些,因为孩子总有点像爸爸嘛。
Collection:Collection接口继承了Iterable接口,主要是为了表明集合是可以使用迭代器的,可以通过一个迭代器来访问集合中的元素。可以使用Collection直接制作迭代器:
Collection<String> c=new ArrayList<>();
c.add("1");
c.add("2");
c.add("3");
Iterator<String> iterator=c.iterator();
for(int i=0;i<3;i++){
if(iterator.hasNext()){
System.out.println(iterator.next());
}
}//使用迭代器遍历字符串集合,输出集合中的元素
对于Collection,迭代器是访问的工具,迭代器iterator主要有以下方法:
hasNext()返回布尔值,如果当前元素的下一个元素不为空的话;
next()将iterator移动到下一个元素(是不是觉得很像c语言里的指针);
remove()移除当前元素,如果当前元素为空返回UnsupportedOperationException("remove");
forEachRemaining(Consumer<? super E> action)这个方法研究的我要死了,首先说一下作用:为每一个剩下(留下的)的元素执行一个操作,操作我只知道使用 Lambda
表达式可以进行操作, Lambda表达式举个例子 student->student.name="jyy",代表student代替的对象的名字属性赋值为jyy,具体指代什么对象则要看forEachRemaining(Consumer<? super E> action)中泛型Consumer<? super E>里的“?”是什么,<? super E>这个代表“?”所指代的对象不能是E对象的子类,只能是E或者E的父类。这个方法里的Consumer不能为空否则跑出Object的NullPointerException,然后对于每一个对象,都执行Consumer传入的操作,值得一提的是,Consumer不能进行对象直接赋值给对象的操作,原因还没有相关参考,也许哪位大神能解决下。Consumer的accept函数最终接受执行操作的对象,这里就是next()。
说完iterator再回到Collection,它主要有这么几个方法:
size()返回集合大小
isEmpty()集合为空返回false否则true
contains(Object o)是否包含某一对象,包含返回true 否则false
iterator()返回一个迭代器对象,用法如上所述
toArray()返回一个Object数组,用来干点什么有可能方便
toArray(T[] a)返回一个包含当前Collection的所有元素的,不包含别的元素的数组,a参数只要初始化了并且不为空就行
add(E e)为集合在末尾添加一个元素e
remove(Object o)移除一个当前元素o为要移除的元素
containsAll(Collection<?> c)如果包含Collection返回true否则饭后false
addAll(Collection<? extends E> c)将c集合添加到当前集合末尾,添加成功返回true,不成功返回false(添加不相同的对象时)
removeAll(Collection<?> c)将集合c中存在的所有元素从本集合中移除
removeIf(Predicate<? super E> filter)移除满足条件的对象,Pridicate一般也用Lambda表达式去写
retainAll(Collection<?> c)保存当前集合在c集合中有的元素
clear()清空集合
equals(Object o)对象比较
hashCode()返回哈希散列值
spliterator()生成iterator的split版本,可将生成的元素交付多线程进行操作,具体实现方法将在本学习结束后进行研究
stream()生成基于collection的顺序流
parallelStream()生成基于collection的并行流
最后三个方法在线程上会进一步学习。
最后回到List上,List除了继承了Collection的所有方法还新增加了索引index因此有如下方法:
addAll(int index, Collection<? extends E> c)在特定的位置添加Collection的全部对象
get(int index)获取特定位置的E对象
set(int index, E element)在特定位置
add(int index, E element)在特定位置添加对象
remove(int index)移除特定位置对象
indexOf(Object o)获取第一个o对象的位置
lastIndexOf(Object o)获取最后一个o对象的位置
今天先写到这里因为后面有几个麻烦的方法需要解释,还会进一步解释Collection的流操作
- List,Set,Map学习笔记(1)
- Collection、List、Set、Map关系图学习笔记1
- set /list/ map 使用 学习笔记
- hibernate学习笔记(map,set,list映射)
- java学习笔记4.13,List,Set,Map
- List Set Map学习
- 笔记27--Set、Map、List
- Collection、List、Set、Map、Queue关系图学习笔记2
- java集合 - Collection - List - Set - Map - Iterator 学习笔记
- list ,set,map 学习总结
- 疯狂Java学习笔记(43)-----------Map,List与Set的区别
- List、Set学习笔记
- scala编程笔记(2)List-Tuple-set-map
- java中list,set,map的区别(笔记记录)
- STL学习(二)set、map、list、deque简单Demo
- 集合(List、Set、Map)
- Android笔记六.List+Set+Map
- 关于list/set/map学习总结
- 【AMI BIOS入门】多语言版本转换
- SCPPO(二十一):系统统一身份认证的改造之路(续)
- 再论进程
- oracle入门很简单:六、开发利器——PL/SQL Developer
- Java面试题大全(Java基础十一)
- List,Set,Map学习笔记(1)
- runtime交换方法
- ImageView
- oracle入门很简单:七、oracle表空间
- jQuery.load()和Jsp的include的区别
- Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(前言)
- 大型网站技术架构(四):安全与稳定
- 关于页面跳转的坑
- PendingIntent的FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT