java高级特性——List接口及实现类

一.集合的概念

1.1集合与数组的区别

(1)长度区别:集合长度可变,数组长度不可变

(2)内容区别:集合可存储不同类型元素,数组存储只可单一类型元素

(3)元素区别:集合只能存储引用类型元素,数组可存储引用类型元素,也可存储基本类型元素

1.2集合的概念

集合类存放于java.util包中。 
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。 
集合类型主要有3种:set(集)、list(列表)和map(映射)。

通俗的说,集合就是一个放数据的容器,准确的说是放数据对象引用的容器。 

 Java集合类主要由Map接口和Collection接口派生而来,,其中Collection由两个常用的子接口即List接口和set接口,所以常说集合框架由3大类接口构成(Map接口,List接口,set接口)。

二.Collection接口

Collection接口是单列集合的最顶层接口,是最基本的集合接口,可以存储一组不唯一无序的的对象,定义了一些通用的方法。

add(E e)添加元素;  clear()清空元素;  remove(E e)移除元素;  size()元素数量;

toArray()集合转数组;  contains(E e)判断元素是否存在;  isEmpty()判断集合是否为空;

三.List接口
 

list接口常用的实现类——ArrayList和LinkedList

3.1使用ArrayList类动态存储数据

数据结构:数组但不等同于数组,集合中可以添加任何类型的数据,并且添加的数据都将转换成object类型。

特点:查询快,增删慢,主要用于查询遍历数据,为最常用集合之一;

底层分析:数组结构是有序的元素序列,在内存中开辟一段连续的空间,在空间中存放元素,每个空间都有编号,通过编号可以快速找到相应元素,因此查询快;数组初始化时长度是固定的,要想增删元素,必须创建一个新数组,把源数组的元素复制进来,随后源数组销毁,耗时长,因此增删慢。

举例说明Arraylist类的一些常用方法:

public class TestArraylist {
    public static void main(String[] args) {
        ArrayList list=new ArrayList(20);

        list.add(123);//在列表的末尾添加元素o,起始索引位置从0开始
        list.add("adc");
        list.add(12.54);
        list.add(1,"我是伞兵");//在指定的索引位置添加元素o
        list.remove(0);//从例表中删除hiding索引位置的元素

       list.add(10,"88");//越界报错,索引超出给出的数据范围
//        System.out.println(list);
        System.out.println(list.get(1));//返回指定索引位置处的元素,取出的元素是Object类型,
                                          // 使用前需进行强制类型转换
      list.set(2,"这个下标位置的数改变了");//将指定索引位置的元素替换为obj元素
//        System.out.println(list);
        System.out.println(list.contains("我是伞"));//判断例表中是否存在指定元素o
       System.out.println(list.indexOf("adc"));//找例表中某个元素的下标


        //普通for遍历
//        for (int i = 0; i < list.size(); i++) {
//            System.out.println(list.get(i));
//        }
//
//        增强for遍历
//           for(Object o:list){
//            System.out.println(o);
//        }
        //迭代器遍历
        Iterator itr=list.iterator();
        while(itr.hasNext()){
//            Object next=itr.next();
            System.out.println(itr.next());
        }

    }
}

3.2使用LinkedList类动态存储数据

数据结构:双向链表;

特点:查询慢,增删快;

底层分析:链表分为单向和双向,就是一条链子和两条链子的区别;多出的那条链子记录了元素的顺序,因此单向链表结构无序,双向链表结构有序;链表结构没有索引,因此查询慢;链表的增删只需在原有的基础上连上链子或切断链子,因此增删快。

包含ArrayList类所包含的方法,还提供了一些方法可以在Linked List类的首部或尾部进行插入、删除操作。

public class TestLinkedList {
    public static void main(String[] args) {
        LinkedList list =new LinkedList();

        list.add(12330);
        list.add("帅哥");
        list.add(52.2);
        list.add(12);
        list.add(0,"我是伞兵");
        list.addFirst("你好");
        list.addLast("天平");
        System.out.println(list);
        list.remove();
        list.poll();
        list.pop();
        list.peek();
        System.out.println(list.getFirst());
        System.out.println(list.getLast());
    }
}

おすすめ

転載: blog.csdn.net/kkkyzp/article/details/121235159