JAVA学习笔记:第九天

Java中数组与集合的比较

  • 数组也是容器,它是定长的,访问较快,但是数组不会自动扩充
  • 数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象

java中集合框架层次结构

Collection接口 

  • 一组称为元素的对象
  • 是Set接口和List接口的父类

Set 集合 —— 无序的集合:不允许重复

List集合—— 有序的集合:允许重复

常用方法:

Collection接口常用方法
boolean add(Object)
集合中加入一个对象,成功时返回 true
boolean addAll(Collection)
集合中加入另外一个集合对象
int size()
集合内容纳的元素数量
boolean isEmpty()
集合是否为空
boolean contains(Object)
集合内是否含有参数对象
Iterator iterator()
产生一个迭代器
Object[] toArray()
返回一个包含所有元素的对象数组
boolean remove(Object)
从集合中删除对象
boolean removeAll(Collection)
清空指定集合
boolean containsAll(Collection)
判断集合内是否包含子集
boolean retainAll(Collection)
仅保留此 collection 中那些也包含在指
collection 的元素
void clear()
清空集合

Set接口

用来包含一组无序无重复的对象。Set没有修改元素的方法,可以存放null值,但是只能存放一个。

Set接口的实现类

  • HashSet —— 特性:内部对象是散列存取的,采用了哈希技术
  • TreeSet —— 特性: 存入顺序和存储顺序不同,但是存储是按照排序存储的

Set集合是无序的,没有索引,用一般的for 循环 或者 while循环时无法偏历的,可以采用加强 for 循环(foreach) 方法偏历Set集合。

List接口

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

LIst中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素。

List 两个主要的集合实现类:

ArrayList:线性顺序存储,是一种线性表。大小可动态改变,初始容量为10,元素过多会自动扩容,存放的元素是有索引且连续的,索引从 0 开始,可以重复,有顺序

LinkedList:内存结构是链表结构,是一种链表集合,存放的元素是不连续的,元素在堆区中式随意摆放的,可以存放null值,可以重复存放多个相同元素,不担心冲突。

LinkedList最主要的功能是可以在List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现。

List接口常用方法
void add(int index,Object element)
在列表中的 index 位置,添加 element
Object get(int index)
返回列表中指定位置的元素
int indexOf(Object o)
list 中查询元素的索引值,如不存在,
返回- 1
int lastIndexOf(Object o)
List 中如果存在多个重复元素,
indexOf() 方法返回第一个匹配元素的
index lastIndexOf(o) 是返回最后一个
匹配元素的 index.
ListIterator listIterator()
返回列表中元素的列表迭代器
Object remove(int index)
移除列表中指定位置的元素
Object set(int index,Object element)
用指定元素替换列表中指定位置的元素
LinkedList增加方法
void addFirst(Object o)
将给定元素插入此列表的开头
void addLast(Object o)
将给定元素追加到此列表的结尾
Object getFirst()
返回此列表的第一个元素
Object getLast()
返回此列表的最后一个元素
Object removeFirst()
移除并返回此列表的第一个元素
Object removeLast()
移除并返回此列表的最后一个元素

ArrayList与LinkedList的比较

存储结构

  • ArrayList是线性顺序存储
  • LinkedList对象间彼此串连起来的一个链表

操作性能

  • ArrayList适合随机查询的场合
  • LinkedList元素的插入和删除操作性高

Iterator接口(迭代器)

  • Iterator对象称作迭代器,用来方便的实现对容器内的元素进行遍历操作
  • 所有实现了Collection接口的集合类都有一个iterator( )方法,返回一个实现了Iterator接口的对象
  • Iterator对象实现了统一的一个用来遍历Collection中对象的方法
  • Iterator是为遍历而设计,能够从集合中取出元素和删除元素,但是没有添加元素的功能

方法

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

实现过程:

 Collections类

Collections类是类似于Arrays类的公用工具类 ,它提供了一些static方法供集合类使用或操作集合类 。
用来写一些比较器,例如,排名等等。

方法:

 Map接口

  • Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来快速查询“值”对象
  • Map是不同于Collection的另外一种集合接口
  • Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的

两个实现:

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

常用方法

 HashMap与TreeMap的比较

  1. HashMap基于哈希表实现。
  2. TreeMap基于树实现
  3. HashMap性能优于TreeMap。

HashMap与Hashtable的比较

  • Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。
  • HashMap允许将null作为一个entry的key或者value,而Hashtable不允许用null。

集合类的选择

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

集合中常见的异常

 

 泛型的使用<E>

泛型经常被称为 参数化类型 ,它能够像方法一样接受不同类型的参数。
ArrayList<E> 变量名 ;//E是变量类型
  • 在对象放入集合前,为其作个限制
  • 在获取集合中的对象时,不用进行造型的操作
  • 当有不同类型的对象添加到集合中的时候,编译时就能检查出错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值