java 容器 简单总结

学完java编程思想持有对象一章,对容器概念以及常用方法做一个简单的总结,不涉及代码示例。

1.数组与容器的区别

共同点:都可以保存对象。

不同点:

数组:具有固定的尺寸。

容器:自动调整自己的尺寸。

2.基本概念

java容器类类库的用途是保存对象,并将其划分为两个概念

1)Collection:一个独立的元素序列,这些元素都服从一条或多条规则,保存单一的元素。

2)Map:一组成对的键值对对象,允许使用键来查找值。

3.添加一组元素

1)Arrays.asList方法接收一个数组或是一个用逗号分隔的元素列表(可变参数),并将其转化为List对象。在这种情况下,其底层表示的是数组,不能调整尺寸,试图使用add(),delete(),运行时会报“Unsupported Operation”-不支持操作。

2)Collections.addAll()方法接受一个Collection对象以及一个数组或是一个逗号分割的列表。

4.List集合

1)ArrayList:底层是组数结构,长于随机访问元素,但是在List的中间插入和移除元素较慢。

2)LinkedList:底层是链表结构,通过代价较低的在List中间插入和移除元素操作,提供了优化的顺序访问。

常用方法:shuffle():对列表随机排序。clear(),removeAll():清空元素列表,返回[]。contains():确定某个对象是否在列表中。remove():移除元素。indexOf():通过对象引用查找元素在列表中的索引编号。add():添加元素。subList():①返回的是父List的一个视图-即子表,在方法里输入参数(from,to),从索引from开始,截取(to-from)个元素形成新子表List。②非结构性修改(长度没有变化),父子表相互影响。 ③结构性修改,子表修改对父表有效,父表修改对子表,运行会报错。

3)LinkedList还添加了可以使用栈,队列或双端队列的方法。(可引用LinkedList,向上转型为Queue)。各种Queue以及栈的行为,由LinkedList提供技术支持。

5.迭代器

迭代器是一个对象,他的工作是遍历并选择序列中的集合,而客户端程序员不需要关系序列底层结构。统一了对容器的访问方式。

java的Iterator只能单向移动,用来:

1)使用iterator()返回一个Iterator对象。

2)使用next()获得序列中的下一个元素。

3)使用hasNext()检查序列中是否还是元素。

4)使用remove()将迭代器next()新近返回的元素删除。在调用之前必须先调用next()。

5.1 ListInterator是一个更加强大的Interator的子类型。只能用于各种List的访问,可以双向移动,nextIndex(),previousIndex(),产生当前位置前后元素的索引。并可用set(),替换他访问过的最后一个元素。

6.Stack

通常是指先进后出的容器。

常用方法:push():接收对象。peek():返回栈顶元素但并不从栈顶移除,pop():移除并返回栈顶元素。

 

7.Set

具有与Collection相同的接口,不保存重复的元素,随机插入。HashSet:提供最快的查询速度。TreeSet:将元素储存在红-黑数据结构中,对结果升序排序(按字典顺序排序,如果想按照字母排序可向TreeSet构造器传入String.CASE_INSENTIVE_ORDER。LinkedHashSet:使用链表维护元素插入顺序,并通过散列提高查询速度。

8.Map

是一种将对象和对象相关联的设计,HashMap:用来快速访问。TreeMap:保持键始终处于排序状态。LinkedHashMap:保持元素插入的顺序,但也通过散列提供了快速访问能力。

9.Queue

队列是一个典型的先进先出容器。事物插入顺序与取出顺序相同。LinkedList提供了方法以支持队形行为,并且它实现了Queue接口。

常用方法:offer():将一个元素插入到队尾,或者返回false。peek(),element():都将在不移除元素的情况下返回队头元素,前者在队列为空时返回null,后者抛出“NoSuchElementException”异常。poll(),remove():移除并返回队头元素。前者队列为空时返回null,后者抛出“NoSuchElementException”异常。

9.1 ProorityQueue

调用offer()插入对象时,这个对象会在队列中排序。peek(),poll()等方法,获取的元素是队列中优先级最高的元素。

ProorityQueue与Integer、String、Character一起工作,内建了自然排序。例如字母从小大,字符从A-Z。但可以通过在ProorityQueue构造器中输入Collections.reverseOrder()参数,反序排列。

10.Foreach与迭代器

foreach语法主要用于数组和任何Collection对象。

java SE5中引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。因此如果创建了任何实现Iterable接口的类都可以用foreach。iterator()返回的是实现了Iterator<String>的匿名内部类的实例。

代码实例:

public class IterableClass implements Iterable {
    @Override
    public Iterator iterator() {
        return new Iterator() {
            @Override
            public boolean hasNext() {
                return false;
            }

            @Override
            public void remove() {

            }

            @Override
            public Object next() {
                return null;
            }

        };
    }
}

11.新程序中不宜使用过时的Vector、HashTable、Stack。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值