Java集合list学习(一):Java集合

Java集合

Java集合类是工作中运用最多的,最频繁的类,相比于数组(Array)来说,集合类的长度可变,更加适合于需求。

Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象,在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。

Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。

Collection主要有三个子接口,分别是List(集合)、Set(集)、Queue(队列)。其中,List,Queue中的元素有序可重复,而Set中的元素无序不可重复。

List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。

Map同属于java.util包中,是集合的一部分,但与Collection是相互独立的,没有任何关系。Map中都是以key-value的形式存在,其中key必须唯一,主要有HashMap、HashTable、TreeMap三个实现类。

在这里插入图片描述

1、List

在Collection中,List集合是有序的,开发者可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。

在List集合中,常用到ArrayList和LinkedList这两个类。

其中,ArrayList底层通过数组实现,随着元素的增加而动态扩容;而LinkedList底层通过链表来实现,随着元素的增加不断向链表的后端增加节点。

ArrayList是Java集合框架中使用最多的一个类,是一个数组队列,线程不安全集合。

它继承于AbstractList,实现了List、RandomAccess、Cloneable、Serializable接口。
(1)ArrayList实现List接口,得到了List集合框架基础功能;
(2)ArrayList实现RandomAccess接口,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;
(3)ArrayList实现Cloneable接口,得到了clone方法,可以实现克隆方法;
(4)ArrayList实现Serializable接口,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。

它具有如下特点:
1、容量不固定,随着元素的增加而动态扩容(阈值基本不会达到)
2、有序集合(插入的顺序即为输出的顺序)
3、插入的元素可以为null
4、增删改查的效率更高(相对于LinkedList来说)
5、线程不安全

LinkedList是一个双向链表,每一个节点都拥有指向前后节点的引用。相比于ArrayList来说,LinkedList的随机访问效率更低。

它继承AbstractSequentialList,实现了List,Deque、Cloneable、Serializable接口。
(1)LinkedList实现List接口,得到了List集合框架基础功能;
(2)LinkedList实现Deque接口,Deque是一个双向队列,也就是既可以先入先出,也可以先入后出,说简单些就是既可以在头部添加元素,也可以在尾部添加元素;
(3)LinkedList实现Cloneable接口,得到了clone方法,可以实现克隆功能;
(4)LinkedList实现Serializable接口,表示可以被序列化,通过序列化传输,典型的应用就是hessian协议。

1.1 List常用方法

A:添加功能
boolean add(E e);向集合中添加一个元素
void add(int index,E element);在指定位置添加元素
boolean addAll(Collection<?  exntends  E> c);向集合中添加一个集合的元素

B:删除功能
void clear();删除集合中的所有元素
E remove(int index);根据指定索引删除元素,并把删除的元素返回
boolean remove(Object o);从集合中删除指定元素
boolean removeAll(Collection<?> c);从集合中删除一个指定的集合元素

C:修改功能
E set(int index,E element);把指定索引位置的元素修改为指定的值,返回修改前的值

D:获取功能
E get(int index);获取指定位置的元素
Iterator iterator();用来获取集合中的每一个元素

E:判断功能
boolean isEmpty();判断集合是否为空
boolean contains(Object o);判断集合中是否存在指定的元素
boolean containsAll(Collection<?> c);判断集合中是否存在指定的一个集合中的元素。

F:长度功能
int size();获取集合中的元素个数

G:把集合转换成数组
Object[] toArray();把集合变成数组

1.2 ArrayList基本操作

public class ArrayListTest {
    public static void main(String[] args) {
        //创建ArrayList集合
        List<String> list = new ArrayList<String>();
        System.out.println("ArrayList集合初始化容量:" + list.size());
        System.out.println("-----");

        //添加功能
        list.add("hello");
        list.add("world");
        list.add(2, "!");
        System.out.println("ArrayList当前容量:" + list.size());
        System.out.println("-----");

        //修改功能
        list.set(0, "my");
        list.set(1, "name");
        System.out.println("ArrayList当前内容:" + list.toString());
        System.out.println("-----");

        //获取功能
        String element = list.get(0);
        System.out.println(element);
        System.out.println("-----");

        //迭代器遍历集合(ArrayList的实际迭代器是Itr对象)
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.println(next);
        }
        System.out.println("-----");

        //for循环迭代集合
        for (String str : list) {
            System.out.println(str);
        }
        System.out.println("-----");

        //判断功能
        boolean isEmpty = list.isEmpty();
        boolean isContain = list.contains("my");

        //长度功能
        int size=list.size();

        //把集合转换成数组
        String[] strArray=list.toArray(new String[]{});

        //删除功能
        list.remove(0);
        list.remove("world");
        list.clear();
        System.out.println("ArrayList当前容量:"+list.size());
    }
}

打印结果为:

ArrayList集合初始化容量:0
-----
ArrayList当前容量:3
-----
ArrayList当前内容:[my, name, !]
-----
my
-----
my
name
!
-----
my
name
!
-----
ArrayList当前容量:0

1.3LinkedList基本操作

public class LinkedListTest {
    public static void main(String[] args) {
        List<String> linkedList = new LinkedList<String>();
        System.out.println("LinkedList的初始容量:" + linkedList.size());
        System.out.println("-----");

        //添加功能
        linkedList.add("my");
        linkedList.add("name");
        linkedList.add("is");
        linkedList.add("Jack");
        System.out.println("LinkedList当前容量:" + linkedList.size());
        System.out.println("-----");

        //修改功能
        linkedList.set(0, "hello");
        linkedList.set(1, "world");
        System.out.println("LinkedList当前内容:" + linkedList.toString());
        System.out.println("-----");

        //获取功能
        String element = linkedList.get(0);
        System.out.println(element);
        System.out.println("-----");

        //遍历集合(LinkedList实际的迭代器是ListItr对象)
        Iterator<String> iterator = linkedList.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.println(next);
        }
        System.out.println("-----");

        //for循环遍历集合
        for (String str : linkedList) {
            System.out.println(str);
        }
        System.out.println("-----");

        //判断功能
        boolean isEmpty = linkedList.isEmpty();
        boolean isContains = linkedList.contains("Jack");

        //长度功能
        int size = linkedList.size();

        //删除功能
        linkedList.remove(0);
        linkedList.remove("Jack");
        linkedList.clear();
        System.out.println("LinkedList当前容量:" + linkedList.size());
    }
}

打印结果为:

LinkedList的初始容量:0
-----
LinkedList当前容量:4
-----
LinkedList当前内容:[hello, world, is, Jack]
-----
hello
-----
hello
world
is
Jack
-----
hello
world
is
Jack
-----
LinkedList当前容量:0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值