Java - - - 集合学习 - - - List

Java- - -集合学习一(List)

|---- Collection接口:单列集合,用来存储一个一个的对象
  |---- List接口:存储有序的、可重复的数据。- - >”动态“数据
    |---- ArrayList、LinkedList、Vector
  |---- Set接口:存储无序的、不可重复的数据。- - >高中所讲的集合
    |---- HashSet、LinkedHashSet、TreeSet
|---- Map接口:双列集合,用来存储一对(key - value)一对的数据
    |---- HashMap、LinkedHashMap、TreeMap、HashTable、properties

Collection接口中方法的使用

方法描述
boolean add(Object e)将元素e添加到集合中
int size()获取元素个数
boolean addAll(Collection c)将另一个集合中的元素添加到当前集合中
boolean isEmpty()判断当前集合是否为空
void clear()清空集合中的元素
boolean contains(Object obj)判断当前集合中是否包含obj
boolean containsAll(Collection c)判断形参集合c中的元素是否都存在于当前集合中
boolean remove(Object o)移除集合中o元素
boolean removeAll(Collection c)差集:从当前集合中移除c集合中所有的元素
boolean retainAll(Collection c)交集:获取当前集合和c集合的交集,并返回给当前集合
boolean equals(Object o)当前集合和形参obj是否相等
int hashCode()返回当前对象的哈希值
Object[] toArray()集合----->数组
Iterator iterator()返回Iterator接口的实例,用于遍历集合元素

List接口

ArrayList:作为List接口的主要实现类;线程不安全,效率高;底层使用Object[] elementData存储;
LinkedList:对于频繁的插入和删除操作,此类效率比ArrayList高;底层使用双向链表存储
Vector:作为List接口的古老实现类;线程安全,效率低;底层使用Object[] elementData存储;

List中的常用方法
void add(int index,Object ele)在index位置插入ele元素
boolean addAll(int index,Collection eles从index位置开始将eles中的所有元素添加进来
Object get(int index)获取指定index位置的元素
int indexOf(Object obj)返回obj在集合中首次出现的位置
int lastIndexOf(Object obj)返回obj在当前集合中末次出现的位置
Object remove(int index)移除指定index位置的元素,并返回此元素
Object set(int index,Object ele)设置指定index位置的元素为ele
List subList(int fromIndex ,int toIndex)返回从fromIndex到toIndex位置的子集合
List中遍历方式
方式一:Iterator迭代器方式
 @Test
    /**
     *Iterator迭代器遍历
     */
    public void test1(){
        ArrayList arrayList = new ArrayList();
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");

        Iterator iterator = arrayList.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
方式二:增强for循环
@Test
    public void test2(){
        ArrayList arrayList = new ArrayList();
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");

        for(Object o:arrayList){
            System.out.println(o);
        }
    }
方式三:普通for循环
@Test
    public void test3(){
        ArrayList arrayList = new ArrayList();
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");

        for(int i = 0;i < arrayList.size();i++){
            System.out.println(arrayList.get(i));
        }
    }
ArrayList
/**
         *
         *JDK 7中:
         */
        ArrayList list = new ArrayList();//底层创建长度为10的Object[]数组elementData
        list.add(123);//elementData[0] = new Integer(123);
        //.......继续添加
        list.add(1234);//如果此次添加导致底层elementData数组容量不足,则扩容。默认情况下扩容到原来容量的1.5倍,同时需要将原有数组中的数据复制到新的数组中。
        /**
         * JDK 8中
         */
        ArrayList listt = new ArrayList();//底层Object[] elementData初始化为{},并没有创建长度为10的数组
        listt.add(123);//第一次调用add()时,才创建了长度为10的数组,并将数据添加到elementData[0]
        //.......继续添加
        listt.add(1234);//后续的添加操作和扩容操作同jdk7中无异

jdk7中ArrayList的对象的创建有些类似于单例模式中饿汉式,而ArrayList8中ArrayList的对象的创建有些类似与单例模式中懒汉式,延迟了数组的创建,节省内存。

LinkedList
LinkedList linkedList = new LinkedList();//内部声明了Node类型的first和last属性,默认值为null;
        linkedList.add(123);//将123封装到Node中,创建Node对象。
        /*其中Node定义为:体现了LinkedList的双向链表的说法
        private static class Node<E> {
                E item;
                Node<E> next;
                Node<E> prev;

                Node(Node<E> prev, E element, Node<E> next) {
                    this.item = element;
                    this.next = next;
                    this.prev = prev;
                }
            }
        */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值