再谈集合

集合(Collection)

Java中集合类是用来存放对象的
集合相当于一个容器,里面包含着一组对象——容器类
其中的每个对象作为集合的一个元素出现
Java API提供的集合类位于java.util包内

Java中集合框架层次结构:
在这里插入图片描述

集合接口:
在这里插入图片描述

方法含义
boolean add(Object)集合中加入一个对象,成功时返回true
boolean addAll(Collection)集合中加入另外一个集合对象
int size()集合内容纳的元素数量
boolean isEmpty()集合是否为空
boolean contains(Object)集合内是否含有参数对象
Iterator iterator()产生一个迭代器
Object[] toArray()返回一个包含所有元素的对象数组

我们平时自己设计工具类时,像add这样的方法要给返回值,调用的时候可以看是否添加成功。
集合在工作中用得很多…
工具类里面有很多重载(不同参数类型、列表)。我们自己设计工具类时,完成同一功能的方法用重载。
调用现成的比自己写的快…

Set接口

包含一组无序无重复的对象 。

Set接口的实现类:
HashSet:特性在于其内部对象的散列存取,即采用哈希技术。
TreeSet:存入的顺序与存储的顺序不同,存储是按照排序存储的。(存时没顺序,存进去就有顺序了,自然排序-从小到大。

对于筛去重复对象的,直接加到Set中(舍了if)

List接口

包含一组有序有重复的对象。

List集合的实现类:ArrayList、LinkedList
存储结构:ArrayList是线性顺序存储;LinkedList对象彼此串联起来的一个链表。
操作性能:ArrayList适合随机查询的场合;LinkedList元素的插入和删除操作性高。
从功能上,LinkedList要多一些。

LinkedList

方法含义
void addFirst(Object o)将给定元素插入此列表的开头
void addLast(Object o)将给定元素追加到此列表的结尾
Object getFirst()返回此列表的第一个元素
Object getLast()返回此列表的最后一个元素
Object removeFirst()移除并返回此列表的第一个元素
Object removeLast()移除并返回此列表的最后一个元素

Iterator接口

所有实现了Collection接口的集合类都有一个 iterator( )方法,返回一个实现了Iterator接口 的对象。
在这里插入图片描述
在这里插入图片描述

方法含义
Object next()返回游标右边的元素并将游标移动到下一个位置
boolean hasNext()判断游标右边是否有元素
void remove()删除游标左边的元素,在执行完next之后,该操作只能执行一次

Collections类

集合操作的工具类

方法含义
Object max(Collection c, Comparator comp)max算法采用Comparator比较算法
Object max(Collection c)返回集合中的最大元素,需要考虑比较接口的实现
Object min(Collection c)返回集合中的最小元素
void reverse(Collection c)把集合中的元素顺序反转
void copy(List dest, List src)src集合中元素复制到dest集合
void fill(List list, Object o)填充list集合,填充元素为o
int binarySearch(List list, Object key)对排序后的集合list进行查询元素操作
void sort(List list)对一种List做排序

Map接口

HashMap:key/value对是按照Hash算法存储的。
TreeMap:key/value对是排序(按key排序)存储的。

key值是唯一的(不能重复),而key对象是与value对象关联在一起的。
key一般用简单类型(int),虽然它也能是Object,但是用int的很多,方便。

方法含义
Object put(Object key, Object value)将制定的值与此映射中的指定键相关联
void putAll(Map t)将映射t中所有映射关系复制到此映射中
Object get(Object key)返回此映射中映射到指定键的值
Object remove(Object key)若存在此键的映射关系,将其从映射中移除
boolean containsKey(Object key)若此映射包含指定键的映射关系,返回true
boolean containsValue(Object key)若此映射为指定值映射一个或多个键,返回true

HashMap与TreeMap的比较

  1. HashMap基于哈希表实现;TreeMap基于树实现。
  2. HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用;TreeMap没有调优选项,因为该树总处于平衡状态。
  3. HashMap性能优于TreeMap。

用HashMap建图书信息:Book,id,name,author,ISBN。
HashMap<key, value>,key为id,value为Book类型。

HashMap比TreeMap灵活,增大负载因子,减少HashMap使用内存空间。

HashMap与HashTable的比较

  1. HashTable是基于陈旧的Dictionary类的;HashMap是Java 1.2引进的Map接口的一个实现。
  2. HashTable是线程安全的,也就是说是同步的;HashMap是线程不安全的,不是同步的。
  3. HashMap允许将null作为一个entry的key或value,而HashTable不允许。

集合的那些事

集合类的特点

  1. Set内存放的元素不允许重复,List存放的元素有一定的顺序。
  2. Map的应用主要在利用键/值对进行快速查询。
  3. ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好。
  4. HashSet和TreeSet的区别在于集合内元素是否排序。

集合中的问题

集合中的add()方法接受的是一个Object对象的参数,在获取集合中的对象时,必须进行造型(强制类型转换)操作。

因为什么类型都可以存进去,再取出来就出问题了,在放进去前限制放入的类型,取出就不需要强制类型转换了。

集合中泛型的使用

  1. 在对象放入集合前,为其做限制。
  2. 在获取集合中的对象时,不用进行造型(强制类型转换)操作。
  3. 当有不同类型的对象添加到集合中的时候,编译时就能检查出错误。

ArrayList<E> 变量名;
E是变量类型

ArrayList<String> arr;
arr = new ArrayList<String>();
HashMap<Integer, String> hm = new HashMap<Integer, String>();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值