一、集合概述
Java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。而数组长度固定,不能满足变化的要求。所以,java提供了集合。
特点
1. 长度可以发生改变
2. 只能存储对象
3. 可以存储多种类型对象
与数组区别
数组
集合
长度
固定
可变
存储元素
基本类型/引用类型
引用类型
元素类型的一致性
必须一致
可以不一致
集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,java提供了多种集合类。将集合类中共性的功能,不断向上抽取,最终形成了集合体系结构。
数据结构:数据存储的方式
Java中集合类的关系图
集合体系导图(用鼠标拖动图片可看大图或右击图片选择在新标签页中打开图片(I))
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行,于是衍生出两个子类接口List和Set。
A:添加功能
boolean add(Object obj):向集合中添加一个元素
boolean addAll(Collection c):向集合中添加一个集合的元素。
B:删除功能
void clear():删除集合中的所有元素。
boolean remove(Object obj):从集合中删除指定的元素
boolean removeAll(Collection c):从集合中删除一个指定的集合元素。
C:判断功能
boolean isEmpty():判断集合是否为空。
boolean contains(Object obj):判断集合中是否存在指定的元素。
boolean containsAll(Collection c):判断集合中是否存在指定的一个集合中的元素。
D:遍历功能
Iterator iterator():就是用来获取集合中每一个元素。
E:长度功能
int size():获取集合中的元素个数
F:交集功能
boolean retainAll(Collection c):判断两个集合中是否有相同的元素。???
G:把集合转换成数组
Object[] toArray():把集合变成数组。
List接口下的集合元素存储有序,可以重复。
A:添加功能
void add(int index, Object obj):在指定位置添加元素
B:删除功能
Object remove(int index):根据指定索引删除元素,并把删除的元素返回。
C:修改功能
Object set(int index, Object obj):把指定索引位置的元素修改为指定的值,返回修改前的值。
D:获取功能
int indexOf(Object o):返回指定元素在集合中第一次出现的索引
Object get(int index):获取指定位置的元素
ListIterator listIterator():列表迭代器
E:截取功能
List subList(int fromIndex, int toIndex):截取集合。
Set接口下的元素无序,不可以重复。其下面分为HashSet和TreeSet。
底层数据结构是哈希表,线程不安全,效率高。
保证唯一性依赖两个方法:hashCode()和equals()。
顺序:
判断hashCode()值是否相同。
相同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
底层数据结构是二叉树,线程不安全,效率高。
保证元素唯一性的方法时根据返回值是否是0。
保证排序的两种方式:
自然排序(元素具备比较性):实现Comparable接口
比较器排序(集合具备比较性):实现Comparator接口
四.迭代器的使用
1、通过集合对象获取迭代器对象。
2、通过迭代器对象判断。
3、通过迭代器对象获取。
由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。
这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种集合的时候,只要该集合内部实现这个接口即可。
[java]view plaincopy
publicinterfaceIterator
{
publicabstractbooleanhasNext();
publicabstractObject next();
}
publicinterfaceCollection
{
publicabstractIterator iterator();
}
publicinterfaceListextendsCollection
{
...
}
publicclassArrayListimplementsList
{
publicIterator iterator()
{
returnnew Itr();
}
privateclassItrimplementsIterator
{
publicboolean hasNext(){...}
publicObject next(){...}
}
}
[java]view plaincopy
Collection c =newArrayList();
c.add("hello");
c.add("world");
c.add("java");
Iterator it = c.iterator();
while(it.hasNext())
{
String s = (String)it.next();
System.out.println(s);
}
[java]view plaincopy
Collection c=newArrayList();
Student s1=newStudent("林青霞",26);
c.add("s1");
Iterator it=c.iterator();
while(it.hasNext())
{
String s=(String)it.next();
System.out.println(s);
}
所以List的遍历方式共有三种
1、Iterator迭代器
2、ListIterator迭代器
3、普通for+get()
map是一个键值对形式的集合。它的元素都是有键和值组成。Map的键(key)是唯一的,值(value)可以重复。
A:添加功能
V put(K key ,V value) :当key在集合中不存在是,添加元素;当key存在时替换元素
B:判断功能
boolean containsKey (Object key) :判断指定的键是否在集合中存在
Boolean containsValue(Object value):判断指定的值是否在集合中存在
Boolean isEmpty() :判断集合是否为空
C:删除功能
Void clear():清除所有键值对数据
D:获取功能
Object get (Object key) :根据键获取值
Set keyset(): 所有键的集合
Collectionvalues() :所有值的集合
E:长度功能
Int size()
Map包括HashMap、HashTable和TreeMap。其中,HashTable已基本被HashMap取代,这里不做讨论。
(注:HashMap支持null , HashTable不支持null )
[java]view plaincopy
publicstaticvoidmain(String[] args) {
Map map =newHashMap();
map.put("二阳",23);
map.put("二峥",24);
map.put("二光",25);
Set keys=map.keySet();//把键其中起来,存入到set集合中.
for(String key:keys){//遍历键集合,获取每一个键。增强for
Integer value=map.get(key);//让键去找值 get(Object key)
System.out.println(key+"***"+value);
}
}
[java]view plaincopy
publicstaticvoidmain(String[] args) {
Map map =newHashMap();
map.put("二阳",23);
map.put("二峥",24);
map.put("二光",25);
Set> set=map.entrySet();//获取键值对集合。Set<> entrySet()
for(Map.Entry me:set){//遍历键值对集合,获取到每一个键值对。增强for,迭代器
String key=me.getKey();//通过键值对获取键getKey()
Integer value=me.getValue();//通过键值对获取值getValue()
System.out.println(key+"***"+value);
}
}
网友评论