List,Set,Map学习笔记(1)
2016-09-29 16:51
288 查看
最近自己研究了下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:对于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的流操作
相关文章推荐
- 20,21,22-Hibernate容器映射技术(Set、List、Map) -mldn学习笔记 -hxzon
- Java学习笔记(2)----散列集/线性表/队列/集合/图(Set,List,Queue,Collection,Map)
- 【Spring学习笔记-4】注入集合类List、Set、Map、Pros等
- Spring学习笔记 关于Bean属性的初始化 - 使用inner bean以及List, Map与Set的初始化
- 【学习笔记】Hibernate映射List、Map、数组、Set、Bag的具体操作
- java学习笔记4.13,List,Set,Map
- Collection、List、Set、Map、Queue关系图学习笔记2
- Scala学习笔记--Array和List和Tuple和Set和Map
- Collection、List、Set、Map关系图学习笔记1
- scala编程笔记(2)List-Tuple-set-map
- STL中的常用的vector,map,set,sort, list用法笔记 .
- [Spring学习笔记 2 ]装配各种类型的属性 map,list,array,null,properties
- JavaSE学习实战完全笔记--集合的实现细节--Set和Map
- 黑马程序员_学习笔记:9) 集合框架1:Collection(List、Set)、Iterator、List(ArrayList、LinkedList、Vector)
- 13. Java类集 Part 1(类集、Collection接口、List接口、Set接口、SortedSet接口、集合的输出) ----- 学习笔记
- STL中map, list, and pair的学习笔记
- 笔记27--Set、Map、List
- 黑马程序员_学习笔记第14天集合(一)_List、Set
- List,Set,Map再学习一下
- STL中的常用的vector,map,set,sort, list用法笔记(转)