zoukankan      html  css  js  c++  java
  • Java集合 之 List 集合

    1.什么是Lsit集合?

    List集合是一种元素有序的,可重复的集合,集合中每个元素都有自己的元素索引。List集合允许可重复的元素,可以通过索引来访问指定位置的元素。

    2.Java8改进的List接口和ListIterator接口

    List作为Collection集合的子接口,可以使用Collection接口的全部方法。另外,由于List是有序集合,又添加了根据索引来操纵List集合的一些方法。

    void add(int index, Object element): 将元素element添加到List集合索引index处。

    boolean addAll(int index, Collection c): 将Collection集合中的所有元素插入到List集合的index处。

    Object get(int index): 返回索引index处的元素。

    int indexOf(Object o): 返回元素o在list集合中第一次出现的位置索引。

    int lastIndexOf(Object o): 返回元素o在List集合中最后一次出现的位置索引。

    Object set(int index, Object element): 将位置索引为index的元素,替换为element。

    List subList(int fromIndex, int toIndex): 返回List集合中从索引fromIndex到索引toIndex之间的所有元素。

    java8为List集合添加了如下两个默认方法:

    void replaceAll(UnaryOperator operator):  根据operator指定的计算规则来重新设置List集合的所有元素。

    void sort(Comparator c):根据Comparator参数对List集合的元素排序。

    public class ListTest {
        public static void main(String[] args){
            List s = new ArrayList();
            s.add(new String("春"));
            s.add(new String("秋"));
            s.add(new String("冬"));
            //输出:[春, 秋, 冬]
            System.out.println(s);
            s.add(1, new String("夏"));
            s.remove(2);
            //输出:[春, 夏, 冬]
            System.out.println(s);
            //输出:1
            System.out.println(s.indexOf(new String("夏")));
            s.set(1, new String("秋"));
            //输出:[春, 秋, 冬]
            System.out.println(s);
            //输出:[秋]
            //包括fromIndex本身,但不包括toFrom本身
            System.out.println(s.subList(1, 2));
        }
    }
    public class ListTest0 {
        public static void main(String[] args){
            List books = new ArrayList();
            books.add(new String("轻量级java EE 企业应用开发"));
            books.add(new String("疯狂 java讲义"));
            books.add(new String("疯狂Android讲义"));
            books.add(new String("疯狂ios讲义"));
            //使用目标类型为Comparator的Lambda表达式来对List集合排序
            books.sort((o1,o2) -> ((String)o1).length() - ((String)o2).length());
            //输出:[疯狂ios讲义, 疯狂 java讲义, 疯狂Android讲义, 轻量级java EE 企业应用开发]
            System.out.println(books);
            books.replaceAll(ele -> ((String)ele).length());
            //输出:[7, 9, 11, 17]
            System.out.println(books);
        }
    }

    3.ArrayList和Vector实现类

       ArrayList和Vector类都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的,允许在分配的Object[]数组。ArrayList和Vector对象使用initialCapacity参数来设置数组的长度,当向Arraylist或Vector添加的元素超出数组的长度时,它们的initialCapacity会自动增加

    ArrayList和Vector提供了两个方法来重新分配Object[]数组:

    void ensureCapacity(int minCapacity):将ArrayList或Vector集合的Object[]数组长度增加大于或等于minCapacity值。

    void trimToSize():调整ArrayList或Vector集合的Objec[]数组长度为当前元素的个数。调用该方法可减少ArrayList或Vector集合对象占用的存储空间。

      ArrayList和Vecto在用法上几乎完全相同,但由于Object[]是一个古老的集合(JDK1.0就有了),所以Vector在早些时候提供了很多方法名很长的方法,Vector中方法名很短的方法都是后来新增的。

    ArrayList和Vector的显著区别是:ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。但Vector是线程安全的,无需保证集合的同步性。因为Vector是线程安全的,所以Vector的性能要比ArrayList集合的性能要低。实际上,即使需要保证List集合的线程安全,也同样不推荐使用Vector。

     4.固定长度的List

      有一个操纵数组的工具类Arrays,该工具类提供了asList(Object... a)方法,该方法可以将一个数组或者指定个数的对象转换为一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector的实例类,而是arrays的内部类ArrayList的实例。

       Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合中的元素,不可增加,删除该集合中的元素。

    public class FixedsizeList {
        public static void main(String[] args){
            List fixedList = Arrays.asList("疯狂java讲义", "疯狂ios讲义");
            //获取fixedList的实现类
            //输出:class java.util.Arrays$ArrayList
            System.out.println(fixedList.getClass());
            //输出:疯狂java讲义
            //    疯狂ios讲义
            fixedList.forEach(System.out::println);
            //试图添加,删除元素会引发UnsupportedOperationException异常
            //fixedList.add("疯狂Android讲义");
        }
    }
  • 相关阅读:
    BZOJ3065(替罪羊树套线段树)
    BZOJ3052(树上带修莫队)
    BZOJ1095(动态点分治+堆)
    NOIWC颓废记
    BZOJ2125 最短路
    Simpson积分(BZOJ2178)
    BZOJ4555 [Tjoi2016&Heoi2016]求和
    NTT+多项式求逆+多项式开方(BZOJ3625)
    Miller-Rabin,Pollard-Rho(BZOJ3667)
    单纯形求解线性规划(BZOJ1061)
  • 原文地址:https://www.cnblogs.com/mercuryli/p/4629749.html
Copyright © 2011-2022 走看看