Skip to main content
 首页 » 编程设计

Java List基本用法

2022年07月19日25exmyth

  List最为Collection接口的子接口,当然可以使用Collection接口里的全部方法。而且由于List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法:

public class ListTest { 
    public static void main(String[] args) { 
        List names = new ArrayList(); 
        //向names集合中添加三个元素 
        names.add("lmx"); 
        names.add("wgl"); 
        names.add(new String("孙悟空")); 
        System.out.println(names); 
        //将新字符串对象插入在第二个位置 
        names.add(1, new String("猪八戒")); 
        //使用for循环遍历list 
        for(int i = 0; i < names.size(); i++) { 
            System.out.println(names.get(i)); 
        } 
        //删除第三个元素 
        names.remove(2); 
        System.out.println(names); 
        //判断指定元素在List集合中的位置:输出1,表明位于第二位 
        System.out.println(names.indexOf(new String("猪八戒"))); 
        //将第二个元素替换成新的字符串对象 
        names.set(1, new String("沙僧")); 
        System.out.println(names); 
        //将names集合的第二个元素(包括)到第三个元素(不包括)截取成子集合 
        System.out.println(names.subList(1, 2)); 
    } 
}

  List判断两个对象只要通过Equals()方法比较返回true即可,所以如果一个对象重写了equals()方法且返回值总是true,那么跟List集合中的元素比较时总是相等。看下面程序:

class A { 
    public boolean equals(Object obj) { 
        return true; 
    } 
} 
 
public class ListTest2 { 
    public static void main(String[] args) { 
        List names = new ArrayList(); 
        names.add(new String("lmx")); 
        names.add(new String("wgl")); 
        names.add(new String("孙悟空")); 
        System.out.println(names); 
        //删除集合中的A对象,将导致第一个元素被删除 
        names.remove(new A()); 
        System.out.println(names); 
        //删除集合中的A对象,再次删除集合中的第一个元素 
        names.remove(new A()); 
        System.out.println(names); 
    } 
}

   与Set只提供了一个iterator()方法不同,List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法:

public class ListIteratorTest { 
    public static void main(String[] args) { 
        String[] names = { 
                "lmx", 
                "wgl" 
        }; 
        List nameList = new ArrayList(); 
        for(int i = 0; i < names.length; i++) { 
            nameList.add(names[i]); 
        } 
        ListIterator lit = nameList.listIterator(); 
        while(lit.hasNext()) { 
            System.out.println(lit.next()); 
            //在指定位置插入一个元素 
            lit.add("-----分隔符-----"); 
        } 
        System.out.println("=====下面开始反向迭代====="); 
        while(lit.hasPrevious()) {//是否还有上一个元素 
            System.out.println(lit.previous()); 
        } 
    } 
}

  从上面程序中可以看出,使用ListIterator迭代List集合时,开始业务要采用正向迭代,即先使用next()方法进行迭代,在迭代过程中可以使用add()方法向上一次迭代元素的后面添加一个新元素。运行上面的程序,看到如下结果:

   下面代码使用LinkedList来实现队列和栈的操作:

public class LinkedListTest { 
    public static void main(String[] args) { 
        LinkedList names = new LinkedList(); 
        //将字符串元素加入队列的尾部 
        names.offer("孙悟空"); 
        //将一个字符串元素加入栈的顶部 
        names.push("wgl"); 
        //将字符串元素添加到队列的头部(相当于栈的顶部) 
        names.offerFirst("lmx"); 
        for(int i = 0; i < names.size(); i++) { 
            System.out.println(names.get(i)); 
        } 
        //访问但不删除栈顶的元素 
        System.out.println(names.peekFirst()); 
        //访问但不删除队列的最后一个元素 
        System.out.println(names.peekLast()); 
        //将栈顶的元素弹出"栈" 
        System.out.println(names.pop()); 
        //下面输出将看到队列的第一个元素被删除 
        System.out.println(names); 
        //访问并删除队列的最后一个元素 
        System.out.println(names.pollLast()); 
        //下面输出将看到队列中只剩下中间一个元素 
        System.out.println(names); 
    } 
}

本文参考链接:https://www.cnblogs.com/wgl1995/p/9405728.html