Java集合 学习随笔 待完善。。。
一、集合与数组
数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度是固定的,不适合在对象数量未知的情况下使用。
集合(只能存储对象Object obj,对象的类型可以不一样)的长度可变,在多数情况下使用。
Set中不能包含重复的元素(仅接受一次,并在内部排序)。
List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。
Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含一下三种方法:
1.hasNext()是否返回下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。
三、几种重要的接口和类的简介
1.List(有序的、可重复)
List里存放的对象是有序的,同时也可以是重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往List集合里插入或删除数据是,会伴随着这后面数据的移动,所以插入、删除数据的速度慢。
2.Set(无序、不能重复)
Set里存放的对象是无序的,不能重复的,值可以重复。根据键得到的值,对Map集合遍历时先得到键的Set集合,对Set集合进行遍历,得到相应的值。
对比如下:

四、遍历
在类集合中提供了种常见的输出方式:
1.Iterator:迭代输出,是使用最多的输出方式。
Iterator it = arr.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}
2.ListIterator:是Iterator的子接口,专门用于输出List中的内容。
3.foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合。
for(int i : arr){
System.out.println(i);
}
4.for循环:
for(int i = 0;i<arr.size();i++){...}
1.ArrayList与LinkedList的区别与联系
ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构。
相对于随机访问取get()与修改set()而言,ArrayList优于LinkedList,因为LinkedList要移动指针。
相对于添加add()与删除remove()而言,LinkedList优于ArrayList,因为ArrayList要移动数据。
2、size则是动态数组的实际大小。
ArrayList的API:
// Collection中定义的API
boolean add(E object)
boolean addAll(Collection<? extends E> collection)
void clear()
boolean contains(Object object)
boolean containsAll(Collection<?> collection)
boolean equals(Object object)
int hashCode()
boolean isEmpty()
Iterator<E> iterator()
boolean remove(Object object)
boolean removeAll(Collection<?> collection)
boolean retainAll(Collection<?> collection)
int size()
<T> T[] toArray(T[] array)
Object[] toArray()
// AbstractCollection中定义的API
void add(int location, E object)
boolean addAll(int location, Collection<? extends E> collection)
E get(int location)
int indexOf(Object object)
int lastIndexOf(Object object)
ListIterator<E> listIterator(int location)
ListIterator<E> listIterator()
E remove(int location)
E set(int location, E object)
List<E> subList(int start, int end)
// ArrayList新增的API
Object clone()
void ensureCapacity(int minimumCapacity)
void trimToSize()
void removeRange(int fromIndex, int toIndex)
List类中没有gey()方法,但是ArrayList实现了RandomAccess接口,所以它支持通过索引值去随机访问元素。
Integer a = null;
for(int i = 0 ; i < arraylist.size() ; i++){
a = (Integer)arraylist.get(i);
}
2、通过迭代器遍历,即通过Iterator去遍历。
Integer num = null;
Interator it = ArrayList.interator();
for(it.hasNext()){
num = (Iterger)it.next();
}
3、for循环遍历。
Integer num = null;
for(Integer i ;arraylist){
num = i;
}
将ArrayList转换为数组
String[] arr = (String[])list.toArray(new String[0]);
for (String str:arr){
System.out.println("str: "+ str);
}
参考:
https://blog.****.net/frankarmstrong/article/details/56003697
https://blog.****.net/lyn789/article/details/76559426
数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度是固定的,不适合在对象数量未知的情况下使用。
集合(只能存储对象Object obj,对象的类型可以不一样)的长度可变,在多数情况下使用。
二、层次关系
Set中不能包含重复的元素(仅接受一次,并在内部排序)。
List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。
Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含一下三种方法:
1.hasNext()是否返回下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。
三、几种重要的接口和类的简介
1.List(有序的、可重复)
List里存放的对象是有序的,同时也可以是重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往List集合里插入或删除数据是,会伴随着这后面数据的移动,所以插入、删除数据的速度慢。
2.Set(无序、不能重复)
Set里存放的对象是无序的,不能重复的,值可以重复。根据键得到的值,对Map集合遍历时先得到键的Set集合,对Set集合进行遍历,得到相应的值。
对比如下:
四、遍历
在类集合中提供了种常见的输出方式:
1.Iterator:迭代输出,是使用最多的输出方式。
Iterator it = arr.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}
2.ListIterator:是Iterator的子接口,专门用于输出List中的内容。
3.foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合。
for(int i : arr){
System.out.println(i);
}
4.for循环:
for(int i = 0;i<arr.size();i++){...}
1.ArrayList与LinkedList的区别与联系
ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构。
相对于随机访问取get()与修改set()而言,ArrayList优于LinkedList,因为LinkedList要移动指针。
相对于添加add()与删除remove()而言,LinkedList优于ArrayList,因为ArrayList要移动数据。
ArratList:
ArrayList包含了两个重要的对象:elementData 和size。1,elementData 是Object[]类型的数组,它保存了添加到ArrayList中的元素.实际上,elementData是一个动态数组,我们通过构造函数Array List(int initialCapacity)来执行他的促使容量位initialCapacity;如果通过无参构造函数ArrayList()来创建ArrayList,则elementData的默认容量为10;elementData.lenght会随着ArrayList.size()增长而动态增长,每当
ArrayList.size()>=elementData..lenght时,elementData.lenght=elementData.lenght+(elementData.lenght >> 1);
即每当ArrayList的容量大于或等于elementDAta的宽度时,elementData.lenght会增加一半的宽度度,相当于1.5倍。新的容量=“(原始容量*3)/2+1”.2、size则是动态数组的实际大小。
ArrayList的API:
// Collection中定义的API
boolean add(E object)
boolean addAll(Collection<? extends E> collection)
void clear()
boolean contains(Object object)
boolean containsAll(Collection<?> collection)
boolean equals(Object object)
int hashCode()
boolean isEmpty()
Iterator<E> iterator()
boolean remove(Object object)
boolean removeAll(Collection<?> collection)
boolean retainAll(Collection<?> collection)
int size()
<T> T[] toArray(T[] array)
Object[] toArray()
// AbstractCollection中定义的API
void add(int location, E object)
boolean addAll(int location, Collection<? extends E> collection)
E get(int location)
int indexOf(Object object)
int lastIndexOf(Object object)
ListIterator<E> listIterator(int location)
ListIterator<E> listIterator()
E remove(int location)
E set(int location, E object)
List<E> subList(int start, int end)
// ArrayList新增的API
Object clone()
void ensureCapacity(int minimumCapacity)
void trimToSize()
void removeRange(int fromIndex, int toIndex)
ArrayList的遍历方式
1、随机访问,通过索引值去遍历。List类中没有gey()方法,但是ArrayList实现了RandomAccess接口,所以它支持通过索引值去随机访问元素。
Integer a = null;
for(int i = 0 ; i < arraylist.size() ; i++){
a = (Integer)arraylist.get(i);
}
2、通过迭代器遍历,即通过Iterator去遍历。
Integer num = null;
Interator it = ArrayList.interator();
for(it.hasNext()){
num = (Iterger)it.next();
}
3、for循环遍历。
Integer num = null;
for(Integer i ;arraylist){
num = i;
}
将ArrayList转换为数组
String[] arr = (String[])list.toArray(new String[0]);
for (String str:arr){
System.out.println("str: "+ str);
}
参考:
https://blog.****.net/frankarmstrong/article/details/56003697
https://blog.****.net/lyn789/article/details/76559426