Java集合 学习随笔 待完善。。。

一、集合与数组

数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度是固定的,不适合在对象数量未知的情况下使用。

集合(只能存储对象Object obj,对象的类型可以不一样)的长度可变,在多数情况下使用。

 

 

二、层次关系

Collection接口是集合类的根接口、对象的集合,Java中没有提供这个接口的直接实现类。但是却让其继承产生了两个接口,就是Set和List。

Set中不能包含重复的元素(仅接受一次,并在内部排序)。

List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。

Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。


Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含一下三种方法:
1.hasNext()是否返回下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。


三、几种重要的接口和类的简介
1.List(有序的、可重复)
List里存放的对象是有序的,同时也可以是重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往List集合里插入或删除数据是,会伴随着这后面数据的移动,所以插入、删除数据的速度慢。


2.Set(无序、不能重复)
Set里存放的对象是无序的,不能重复的,值可以重复。根据键得到的值,对Map集合遍历时先得到键的Set集合,对Set集合进行遍历,得到相应的值。


对比如下:



四、遍历

在类集合中提供了种常见的输出方式:

1.Iterator:迭代输出,是使用最多的输出方式。
Iterator it = arr.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}

2.ListIterator:是Iterator的子接口,专门用于输出List中的内容。

3.foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合。
for(int i : arr){
System.out.println(i);
}

4.for循环:
for(int i = 0;i<arr.size();i++){...}

 

 

五、ArrayList与LinkedList

1.ArrayList与LinkedList的区别与联系

ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构。
相对于随机访问取get()与修改set()而言,ArrayList优于LinkedList,因为LinkedList要移动指针。
相对于添加add()与删除remove()而言,LinkedList优于ArrayList,因为ArrayList要移动数据。
 

 

ArratList:

ArrayList包含了两个重要的对象:elementData 和size。

 

1,elementData 是Object[]类型的数组,它保存了添加到ArrayList中的元素.实际上,elementData是一个动态数组,我们通过构造函数Array List(int initialCapacity)来执行他的促使容量位initialCapacity;如果通过无参构造函数ArrayList()来创建ArrayList,则elementData的默认容量为10;elementData.lenght会随着ArrayList.size()增长而动态增长,每当

ArrayList.size()>=elementData..lenght时,elementData.lenght=elementData.lenght+(elementData.lenght >> 1);

即每当ArrayList的容量大于或等于elementDAta的宽度时,elementData.lenght会增加一半的宽度度,相当于1.5倍。新的容量=“(原始容量*3)/2+1”.
2、size则是动态数组的实际大小。

ArrayList的API:
// Collection中定义的API
boolean             add(E object)
boolean             addAll(Collection<? extends E> collection)
void                clear()
boolean             contains(Object object)
boolean             containsAll(Collection<?> collection)
boolean             equals(Object object)
int                 hashCode()
boolean             isEmpty()
Iterator<E>         iterator()
boolean             remove(Object object)
boolean             removeAll(Collection<?> collection)
boolean             retainAll(Collection<?> collection)
int                 size()
<T> T[]             toArray(T[] array)
Object[]            toArray()
// AbstractCollection中定义的API
void                add(int location, E object)
boolean             addAll(int location, Collection<? extends E> collection)
E                   get(int location)
int                 indexOf(Object object)
int                 lastIndexOf(Object object)
ListIterator<E>     listIterator(int location)
ListIterator<E>     listIterator()
E                   remove(int location)
E                   set(int location, E object)
List<E>             subList(int start, int end)
// ArrayList新增的API
Object               clone()
void                 ensureCapacity(int minimumCapacity)
void                 trimToSize()
void                 removeRange(int fromIndex, int toIndex)
 

 

ArrayList的遍历方式

1、随机访问,通过索引值去遍历。
List类中没有gey()方法,但是ArrayList实现了RandomAccess接口,所以它支持通过索引值去随机访问元素。
Integer a = null;
for(int i = 0 ; i < arraylist.size() ; i++){
a = (Integer)arraylist.get(i);
}
2、通过迭代器遍历,即通过Iterator去遍历。
Integer num = null;
Interator it = ArrayList.interator();
for(it.hasNext()){
num = (Iterger)it.next();
}

3、for循环遍历。
Integer num = null;
for(Integer i ;arraylist){
num = i;
}

将ArrayList转换为数组
        String[] arr = (String[])list.toArray(new String[0]);
        for (String str:arr){
            System.out.println("str: "+ str);
}


参考:
https://blog.csdn.net/frankarmstrong/article/details/56003697
https://blog.csdn.net/lyn789/article/details/76559426

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值