java基础学习--Collection集合
2015-05-05 15:28
316 查看
1、集合类概述
1)面向对象对事物的体现都是以对象的形式,那么为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
2)数组也可以存储对象,但是长度是固定的,而集合长度是可变的;数组中可以存储基本数据类型,集合只能存储对象。
3)集合类的特点:集合只用于存储对象,长度是可变的;集合可以存储不同类型的对象。
2、Collection
Collection是集合框架中的常用接口,其下有两个子接口:List(列表)和Set(集)。
List集合元素是有序的,元素可以重复,该集合体系有索引;
Set集合元素是无序的,元素不可以重复。
注意:集合中存储的都是对象的引用地址。
常见操作:
1)添加:
add(Object obj):返回值是boolean,参数类型是Object,方便接受任意类型对象;
2)删除:
remove(Object obj):移除某个元素;
clear( ):清空集合;
3)判断:
contains(Object obj):判断是否包含obj这个元素;
isEmpty():判断集合是否为空;
4)获取:
size():获取集合长度;
5)取交集:
retainAll(另一集合):取两个集合的交集;
removeAll(另一集合):移除两个集合的交集部分;
6)取出:iterator()
定义一个工具,获取迭代器,用于取出集合中的元素。
迭代是取出集合中元素的一种方式,将取出这个动作封装成了一个对象来描述,就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素,因此取出方式被定义成了内部类。每个容器的数据结构不同,取出的动作细节也不同,但是他们都具有共性内容,即判断和取出。
所以定义了一个Iterator类,通过一个对外提供的方法iterator(),来获取集合的取出对象。Collection中有iterator方法,其每一个子类集合对象都具备迭代器。
Iterator的常见操作:
A、hasNext():仍可迭代,则返回true,否则false;
B、next():迭代取出下一个元素;
C、remove():移除最后迭代的那个元素。
注意:
A、在迭代时循环中next()调用一次,就要hasNext()判断一次;
例如:
ArrayLista = newArrayList();
Iterator it =a.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
B、迭代器的next()方法是自动向下取元素的,要避免出现NoSuchElementException异常;
C、next()方法的返回值类型是Object,要注意类型转换。
3、List集合
1)List特有方法
凡是可以操作角标的方法都是该体系特有的方法。
A、增
add(index,element):指定位置添加元素,返回值类型为boolean;
addAll(index,collection):指定位置添加集合,若不指定位置则在原集合的尾端添加;
B、删
remove(index):删除指定位置的元素;
C、改
set(index,element):修改指定位置的元素为element;
D、查
get(index):获取指定角标的元素;
subList(from,to):获取部分元素;返回是List集合;
E、其他方法
listIterator():List特有的迭代器(列表迭代器);
List集合判断元素是否相同和移除等操作,依据的是元素的equals方法。
2)List集合特有迭代器:listIterator()是iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException异常。
所以在迭代时,只能用迭代器的方法操作元素,可是Iterator的方法是有限的(只对元素判断、取出、删除),如要进行其他操作:添加、修改等操作就需要其子接口:ListIterator。
该接口只能通过List集合的listIteraor方法获取。
3)List集合的三个子集:
ArrayList:底层的数据结构是数组结构,特点:查询速度很快,但是增删稍慢,线程不同步。
LinkedList:底层的数据结构是链表结构,特点:增删速度很快,但是查询稍慢。
Vector:底层是数组数据结构,线程同步,已被ArrayList替代。
A、Vector特有的取出方法:枚举(Enumeration)
其实枚举和迭代是一样的,但是枚举的名称以及方法的名称都过长,所以被迭代器取代了。
方法:
addElement(obj):添加元素,相当于add(obj);
Enumerationelements():Vector特有取出方式(枚举);
hasMoreElements():相当于hasNext()方法;
nextElements():相当于next()方法。
B、LinkedList特有方法
增:
addFirst():在头部添加;
addLast():在尾部添加;
获取:
getFirst():获取第一个元素;
getLast():获取末尾元素;
这种方式获取元素,不删除元素。
删:
rmoveFirst():移除第一个元素;
removeLast():移除最后一个元素;
这种获取元素,会删除元素。
到了1.6版本以后,用了以下方法替代:
增:
offFirst()和offLast();
获取:
peekFirst()和peekLast();
获取元素,但是不删除,如果集合中没有元素,会返回null。
删:
pollFirst()和pollLast();
获取元素,并删除元素。如果集合中没有元素,会返回null。
4、Set集合
Set集合元素是无序的,不可重复的,所以其存入和取出的顺序不一定一致。
Set两个子集HashSet和TreeSet:
Set集合的功能和Collection是一致的。
1)HashSet
HashSet:底层数据结构是哈希表,线程不同步。
通过元素的两个方法:hashCode()和equals()来保证元素的唯一性,如果元素的HashCode值相同,才会判断equals是否为true,如果元素的hashCode值不同,不会调用equals,那么自定义对象,要覆写hashCode()和equals()。
HashSet对于判断元素是否存在、删除等操作,依赖的方法是元素的hashCode()和equals()方法。
2)TreeSet
TreeSet:可以对Set集合中的元素进行排序,底层数据结构是二叉树。默认按照字母的自然排序。
A、TreeSet集合实现了Comparable接口,强制让对象具备了比较性,保证元素唯一性的依据是compareTo方法return 0。存入的自定义对象要实现Comparable接口,覆写compareTo()方法。
B、若TreeSet集合元素自身不具备比较性,或者具备的比较性不是所需的,这时就需要让集合自身具备比较性,在集合初始化时,就有比较方式:定义比较器,将其作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
例如:
定义一个按元素元素长度排序的比较器,实现Comparator接口,覆写compare方法,然后将其作为参数传入TreeSet集合构造函数。
class CompareDemo
{
public static void main(String[] args)
{
TreeSet ts = newTreeSet(new StrlenComparator());
}
}
class StrlenComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
if(s1.length()>s2.length())
return 1;
if(s1.length()>s2.length())
return 0;
else
return -1;
}
}
1)面向对象对事物的体现都是以对象的形式,那么为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
2)数组也可以存储对象,但是长度是固定的,而集合长度是可变的;数组中可以存储基本数据类型,集合只能存储对象。
3)集合类的特点:集合只用于存储对象,长度是可变的;集合可以存储不同类型的对象。
2、Collection
Collection是集合框架中的常用接口,其下有两个子接口:List(列表)和Set(集)。
List集合元素是有序的,元素可以重复,该集合体系有索引;
Set集合元素是无序的,元素不可以重复。
注意:集合中存储的都是对象的引用地址。
常见操作:
1)添加:
add(Object obj):返回值是boolean,参数类型是Object,方便接受任意类型对象;
2)删除:
remove(Object obj):移除某个元素;
clear( ):清空集合;
3)判断:
contains(Object obj):判断是否包含obj这个元素;
isEmpty():判断集合是否为空;
4)获取:
size():获取集合长度;
5)取交集:
retainAll(另一集合):取两个集合的交集;
removeAll(另一集合):移除两个集合的交集部分;
6)取出:iterator()
定义一个工具,获取迭代器,用于取出集合中的元素。
迭代是取出集合中元素的一种方式,将取出这个动作封装成了一个对象来描述,就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素,因此取出方式被定义成了内部类。每个容器的数据结构不同,取出的动作细节也不同,但是他们都具有共性内容,即判断和取出。
所以定义了一个Iterator类,通过一个对外提供的方法iterator(),来获取集合的取出对象。Collection中有iterator方法,其每一个子类集合对象都具备迭代器。
Iterator的常见操作:
A、hasNext():仍可迭代,则返回true,否则false;
B、next():迭代取出下一个元素;
C、remove():移除最后迭代的那个元素。
注意:
A、在迭代时循环中next()调用一次,就要hasNext()判断一次;
例如:
ArrayLista = newArrayList();
Iterator it =a.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
B、迭代器的next()方法是自动向下取元素的,要避免出现NoSuchElementException异常;
C、next()方法的返回值类型是Object,要注意类型转换。
3、List集合
1)List特有方法
凡是可以操作角标的方法都是该体系特有的方法。
A、增
add(index,element):指定位置添加元素,返回值类型为boolean;
addAll(index,collection):指定位置添加集合,若不指定位置则在原集合的尾端添加;
B、删
remove(index):删除指定位置的元素;
C、改
set(index,element):修改指定位置的元素为element;
D、查
get(index):获取指定角标的元素;
subList(from,to):获取部分元素;返回是List集合;
E、其他方法
listIterator():List特有的迭代器(列表迭代器);
List集合判断元素是否相同和移除等操作,依据的是元素的equals方法。
2)List集合特有迭代器:listIterator()是iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException异常。
所以在迭代时,只能用迭代器的方法操作元素,可是Iterator的方法是有限的(只对元素判断、取出、删除),如要进行其他操作:添加、修改等操作就需要其子接口:ListIterator。
该接口只能通过List集合的listIteraor方法获取。
3)List集合的三个子集:
ArrayList:底层的数据结构是数组结构,特点:查询速度很快,但是增删稍慢,线程不同步。
LinkedList:底层的数据结构是链表结构,特点:增删速度很快,但是查询稍慢。
Vector:底层是数组数据结构,线程同步,已被ArrayList替代。
A、Vector特有的取出方法:枚举(Enumeration)
其实枚举和迭代是一样的,但是枚举的名称以及方法的名称都过长,所以被迭代器取代了。
方法:
addElement(obj):添加元素,相当于add(obj);
Enumerationelements():Vector特有取出方式(枚举);
hasMoreElements():相当于hasNext()方法;
nextElements():相当于next()方法。
B、LinkedList特有方法
增:
addFirst():在头部添加;
addLast():在尾部添加;
获取:
getFirst():获取第一个元素;
getLast():获取末尾元素;
这种方式获取元素,不删除元素。
删:
rmoveFirst():移除第一个元素;
removeLast():移除最后一个元素;
这种获取元素,会删除元素。
到了1.6版本以后,用了以下方法替代:
增:
offFirst()和offLast();
获取:
peekFirst()和peekLast();
获取元素,但是不删除,如果集合中没有元素,会返回null。
删:
pollFirst()和pollLast();
获取元素,并删除元素。如果集合中没有元素,会返回null。
4、Set集合
Set集合元素是无序的,不可重复的,所以其存入和取出的顺序不一定一致。
Set两个子集HashSet和TreeSet:
Set集合的功能和Collection是一致的。
1)HashSet
HashSet:底层数据结构是哈希表,线程不同步。
通过元素的两个方法:hashCode()和equals()来保证元素的唯一性,如果元素的HashCode值相同,才会判断equals是否为true,如果元素的hashCode值不同,不会调用equals,那么自定义对象,要覆写hashCode()和equals()。
HashSet对于判断元素是否存在、删除等操作,依赖的方法是元素的hashCode()和equals()方法。
2)TreeSet
TreeSet:可以对Set集合中的元素进行排序,底层数据结构是二叉树。默认按照字母的自然排序。
A、TreeSet集合实现了Comparable接口,强制让对象具备了比较性,保证元素唯一性的依据是compareTo方法return 0。存入的自定义对象要实现Comparable接口,覆写compareTo()方法。
B、若TreeSet集合元素自身不具备比较性,或者具备的比较性不是所需的,这时就需要让集合自身具备比较性,在集合初始化时,就有比较方式:定义比较器,将其作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
例如:
定义一个按元素元素长度排序的比较器,实现Comparator接口,覆写compare方法,然后将其作为参数传入TreeSet集合构造函数。
class CompareDemo
{
public static void main(String[] args)
{
TreeSet ts = newTreeSet(new StrlenComparator());
}
}
class StrlenComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
if(s1.length()>s2.length())
return 1;
if(s1.length()>s2.length())
return 0;
else
return -1;
}
}
相关文章推荐
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- java基础学习集合之Collection 九-1
- java基础学习_集合类03_用户登录注册案例(集合版)、Set集合、Collection集合总结_day17总结
- 【java基础】【Collection和Map集合】
- java基础学习:collection
- Java基础学习笔记-Collection
- java基础27 单例集合Collection及其常用方法
- java基础28 单例集合Collection下的List和Set集合
- Java基础进阶_day07_(泛型,Collection集合,迭代器,增强for循环)
- 集合1--毕向东java基础教程视频学习笔记
- 集合2--毕向东java基础教程视频学习笔记
- 集合3--毕向东java基础教程视频学习笔记
- [学习笔记] Java核心技术 卷一:基础知识 集合(六)
- Java基础(集合卷)--单列集合老大Collection
- Java基础(集合卷)--单列集合老大Collection
- Java基础(集合卷)--单列集合老大Collection
- Java基础(集合卷)--单列集合老大Collection
- Java基础(集合卷)--单列集合老大Collection
- Java基础(集合卷)--单列集合老大Collection
- Java基础(集合卷)--单列集合老大Collection