黑马程序员——集合类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

集合类的框架如下图:


其中区别:

List:元素是有序的,有索引的,元素可以重复;

Set:元素是无序的,无索引的,元素不能重复。


集合中存放的对象,其实只是存放对象的地址而已。


迭代器(关键代码如下):

ArrayList al=new ArrayList();
Iterator it=al.iterator();

iterator()被定义在了集合内部,这样可以直接访问集合内的元素,所以这个方法归为一类,被定义在了集合类内部,是其内部类,每个容器的数据结构不同,所以iterator()实现的方式不一样,但都有共性:判断hasNext()取出next(),那么可以将共性抽取,形成接口,以后定义其他容器的时候,也可以在其内部也定义一个类来实现Iterator接口(具体实现方法自己定义),这样无论什么容器,都可以用同一个规则来实现迭代。
迭代的伪代码比较:

Iterator it=al.iterator();
while(it.hasNext){
sop(it.next);
}
比较:for(Iterator it=al.iterator();it.hasNext();){
sop(it.next());
}
其中第二种用for循环比较好,因为迭代器被定义成了局部变量,在for循环结束后就不存在了,销毁了,不占用内存。

List特有的迭代器ListIterator,这个迭代器是Iterator接口的子接口。

Iterator:判断,取出,删除
ListIterator:判断,取出,删除,添加,修改,反向迭代
while(it.hasNext)
{Object obj=it.next();
if(obj.equals("java002"))
al.add("java8");//不可用,在迭代中只可以用it迭代对象操作,可用it.remove();而其他方法如添加修改则要将迭代器换成ListIterator。
}
List:JDK1.2版本之后才有;判断元素是否相同,依据的是存入元素的equal()方法(底层自动调用,这个体现在了一些方法上,如contain())。
ArrayList:JDK1.2版本之后才有;底层使用的是数组数据结构,查询快,增删稍慢(不同步)。
LinkedList:JDK1.2版本之后才有;底层使用的是链表数据结构,查询稍慢,增删速度快。
Vector:JDK1.0版本就有;底层使用的是数组数据结构,(同步的)被ArrayList替代了。此容器已经不使用了,即使要同步,也直接用ArrayList直接来加锁。
ArrayList默认长度为10,超过时按50%递增。
Vector默认长度为10,超过时按100%递增。可变长度数组起始就是不断的new数组来实现
通过构造函数ArrayList可以指定初始化长度:new ArrayList(int length)。
Vector特有方法:凡方法名后面是Element的都是其特有的方法。其中(伪代码如下):
Vector v=new Vector();
v.add(...);
...
Enumeration en=v.elements();
while(en.hasMoreElments())
{sop(en.nextElement());}
枚举是Vector特有的取出方式。因为枚举的名称及方法名过长,所以被迭代器替代了。
LinkedList特有方法:
addFirst();getFirst();removeFirst();addLast();getLast();removeLast();
(注意上述方法的返回值)其中remove在列表为空的情况下会抛异常。
1.6版本之后的pollFirst();pollLast();获取并删除元素操作在列表为空的情况下会返回null。
Set:元素无序(存入和取出的顺序不一定一致),元素不可重复。
HashSet:底层数据结构是哈希表,判断元素是否重复依赖于存入对象的hashCode()和equal()方法。
TreeSet:底层数据结构是二叉树,可对Set集合进行排序。

TreeSet实现自动排序的两种方法:
第一种:存入的元素需要实现Comparable接口,实现里面的public int compareTo(Object obj)方法,返回值为负整数,零,正整数分别代表此对象小于,等于,大于指定对象(注意的知识点,上述obj可以先判断是否是该对象所对应的类的子类,代码:obj instanceof Student;compareTo方法返回零是器保证唯一性的依据)

第二种:构造一个TreeSet集合,根据指定的比较器进行排序(伪代码如下):

TreeSet(Comparator<? super E> comparator) class MyCompare implements Comparator

{

public int compare(Object o1,Object o2)

{//返回值为负整数,零,正整数分别代表o1小于,等于,大于o2}

}

第一种方法叫做:元素的自然排序,也是默认排序;
第二种方法叫做:自建比较器排序。两种并存的情况下,排序依赖第二种。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值