《Java编程思想》--集合类

本文深入讲解Java中的容器类,包括Collection和Map两大类,并详细介绍了List、Set、Queue等子类的特点与用法,以及迭代器模式的应用。
1、Java的容器类库分为两种概念。第一种,单独元素组成的序列(collection)。第二种,由两个相互关联的对象组成的序列,也称关联数组(map)。
java的容器类都可以自动调整尺寸,弥补了数组
直接打印collection对象也能打印出里面的元素,因为collection子类都重写了toString方法。

Collection                                       Map
---List(元素有序且可重复) ---HashMap
    ---ArrayList(按插入顺序排序) ---TreeMap
---LinkedList(同上) ---LinkedMap
---Set(元素不可重复)
---HashSet(哈希值与某个函数结合值排序)
---TreeSet(两者比较按升序排)
---LinkedSet(按插入顺序排)

2、插入一组元素
Arrays.asList();括号内参数可以为数组与逗号分隔开的元素序列
Collections.addAll();括号内参数可以为collection,数组与元素序列
collection.addAll();括号内参数是collection
Collections.sort(collection c);对c进行自然排序


3、List----在Collection基础上增加大量方法
---增删查改 add(obj)和add(index,obj)和addAll(collection)和addAll(index,collection),remove(obj)和removeAll(collection c),get(index),set(index,obj)
---取子集合   subList(index_start,index_end);
---保留相同子集retainAll(collection c)
---是否包含在里面  contain(obj),containAll(collcetion c)
---清除所有元素 clear();
---是否为空isEmpty();
---将List转换为数组 toArray(new Integer[0]);
---indexOf(obj)用对象得到索引
---size()获得容器元素个数
  remove和contain,retain等方法都依赖equal方法。

4、Iterator---不用关心容器的类型单向去遍历容器的所有元素
--ListIterator  通过listiterator()方法获得,当括号内有参数n时代表从List的索引处n位置开始迭代
---更好用的子类型,可以双向移动,但只能用于List集合
---判断迭代器是否有前一个元素 hasPrevious()
---迭代器前一个元素  previous();
---一个元素的当前索引与前一个索引 nextIndex()和previousIndex()

5、  ---List  
---ArrayList 长于随机访问元素,插入与移除比较慢
---LinkedList  代价较低的插入与移除,优化了顺序访问。在随机访问比较慢
还添加了可以使其用作栈,队列或双端队列的方法
---获取首元素getFirst(),element();列表为空时抛异常
---获取首元素peek();列表为空时抛出null
---移除首元素remove()和removeFirst()列表为空时抛异常
---移除首元素poll()列表为空时抛出null
---移除尾元素removeLast()
---增加元素在尾部add(),addFirst(),addLast()

6、迭代器--——--一种不关心容器类型的遍历容器元素的设计模式(将遍历序列的操作与序列底层结构分开)
    轻量级对象,用于遍历容器对象而不关心容器类型,只能单向遍历
    统一了对容器的访问方式
---通过iterator()方法获得
---hasNext()方法返回boolean值确定是否还有元素
---next()方法获得元素
----remove()方法删除迭代器新返回的元素

7、Stack  -——--栈,后进先出的数据结构。LinkedList直接实现了栈的全部方法,因此可当栈使用。
    栈是用LinkedList实现的,在程序语言中常用来对表达式求值

8、Set   --——--保存不重复的元素,常用的是测试归属性
         ----HashSet   快速查询
         ----TreeSet 红黑树数据结构
 ----LinkedHashSet 按链表插入,使用散列加快查询
9、Map  --——--


10、Queue --——-- 典型的先进先出的数据结构,放入与取出的顺序是一样的,常用作将一个对象移向另一个对象的途径
在并发编程中特别重要
---peek()和element()得到队列的首元素,但不删除
---remove()移除队列首元素并返回
---offer()插入一个元素到队列尾部
--priorityQueue  在给定一组元素的情况下,确定了下一个要弹出队列元素的规则
   当使用offer插入元素时,元素会在队列中排序,使用默认的排序,但是可以通过提供自己的comparator来修改这个排序。,可以确保用peek,poll等方法时都得到优先级最高的元素
    可以通过创建队列时给构造器传入一个comparator来获得自己想要的排序

11、foreach与iterator    只要是实现了iterable接口(该接口具有一个产生iterator的方法)的类,都可以在foreach语句中使用
大部分collection类都实现了该接口,除了所有map
---适配器方法设计模式  -用于当想希望迭代器可以根据自己选择向前或向后遍历

    




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值