(一)集合的概况
:整个集合的框架主要包括三大接口,分别是Collection、Set、Map
首先来了解Collection接口,该接口有List和Set两个子类接口
Colection向子类提供了不少基本操作方法:
具体有:add(),clear();contains();euuals();hashCode();isEmpty();remove();size();toArray();
1,先来了解List接口
使用List集合的情况:里面的所有内容和元素都可以重复
List接口常用方法:分为增删改查四个
增:add(index, element);add(index,collection);
删:remove(index);remove(index,element);
查:get(index);subList(from,to);listIterator();
改:set(index,element);
在集合中十分重要的一个概念就是迭代器,下面了解迭代器:
迭代器 :其实就是集合中取出元素的方式。在集合中循环调用next(),一次就要hashNext()一次。Iterator,其实也是一个接口(专门用来判断,取出),通过每个集合内部类都符合一个规则,并且都提供一个对外方法iterator();.
特别注意:
在list中的特有迭代器listiterators 是Iterator的子接口,在操作的时候不可以通过集合对象的方法操作集合中的数据,否则会发生ConcurrentModificationException异常,所以在迭代只能用Iterator操作,但是Iterator操作方法有限,只可以对元素进行判断,取出,删除操作。如果想继续添加或者修改等等操作,就要用到其子类接口listIterator操作,实例代码如下:
import java.util.*;
class ListDemo
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
//添加元素
al.add("java1");
al.add("java2");
al.add("java3");
ListIterator li= al.listIterator() ;
while(li.hasNext())
{
Object obj = li.next();
if(obj.equals("java3"))
// li.add("java20");
li.set("java66");
}
sop(al);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
更清晰的来分析List接口,里面包括Arrylist,Vectory,Linkedlist
三者之间的区别:
Arrylist:底层为数组结构,查阅快(不同步),但是增删慢
Vectory:底层是数组数据结构,特点是,用于线程同步,增删查询操作都慢。而且枚举是其特有的取出方式,实例代码如下:
import java.util.*;
class VectorDemo
{
public static void main(String[] args) throws Exception
{
Vector v=new Vector();
v.add("java01");
v.add("java02");
v.add("java03");
v.add("java04");
Enumeration en =v.elements();
while(en.hasMoreElements())
{
System.out.println(en.nextElement());}
}
}
Linkedlist:底层为链表数据结构,增删快,查询慢,具有自己的特殊方法添加获取查询方法。
2.Set接口
Set集合中的元素在村如何取出的时候是无序的,具有唯一性,即元素不可以重复。
Set是Collection 的子接口,所以其功能和父类保持一致。
Set常见的子类主要有:HashSet,TreeSet
我们先来了HashSet:
注意:HashSet是如何保证元素的唯一性??
深入分析:是通过元素的两个方法确定是的,hashCode(),和equals()完成,
如果元素的HashCode();值相同就会去判断equals()是否为true,
如果元素的HashCode()值不同,就不会去调用equals();
可以理解为在数据操作的时候,有以下动作,首选比较HashCode值,不同,做出相应处理,相同也作出相应处理。
HashSet与ArrayList的区别:HashSet的删除操作依赖哈希值和equals(),但是ArrayList的删除元素只依赖equals()
自我学习心得:这部分集合的学习让我对数据和对象的操作上升到集合的概念,从整体框架中我看到对象的操作的更多的方式,比学习集合以前要方便的多。