黑马程序员——Java集合框架—List

来源:互联网 发布:ubuntu 设置工作路径 编辑:程序博客网 时间:2024/05/29 06:32

概述

List集合代表一个元素有序、可重复的集合,集合中没有元素都有对应的顺序索引。

List集合允许使用重复的元素,可以通过索引来访问指定位置的元素。

List集合默认按元素的添加顺序设置元素的索引,第一次添加的元素的索引为0,以此类推。


List接口

List接口是Collection接口的子接口,所以它拥有Collection接口中定义的所有方法。但由于List集合的特殊性,所以List接口中也定义了它特有的方法。

boolean addAll(int index, Collection<? extends E> c);E get(int index);E set(int index, E element);void add(int index, E element);E remove(int index);int indexOf(Object o);int lastIndexOf(Object o);ListIterator<E> listIterator();ListIterator<E> listIterator(int index);List<E> subList(int fromIndex, int toIndex);

以上都是List接口中特有的方法,这些操作都和List集合的索引有关。

下面是List集合的基本用法:

package org.lgy.study.collection;import java.util.List;import java.util.ArrayList;import java.util.Set;import java.util.HashSet;public class ListTest{public static void main(String[] args){List list = new ArrayList();list.add("疯狂Java讲义");list.add("轻量级Java EE");list.add("经典Java EE");System.out.println(list);//因为List集合可以通过索引访问元素,所以List集合可以使用for循环迭代输出for(int i = 0; i < list.size(); i++){System.out.print(list.get(i) + "  ");}System.out.println();//把1个已存在的集合添加至当前List集合的特定位置Set s = new HashSet();s.add("111");s.add("222");list.addAll(1, s);System.out.println(list);//将指定索引处的元素替换为新元素list.set(3, "333");System.out.println(list);//将指定元素添加至指定索引处list.add(4, "111");System.out.println(list);//获取指定元素的索引System.out.println("list.indexOf(\"111\") = " + list.indexOf("111"));System.out.println("list.lastIndexOf(\"111\") = " + list.lastIndexOf("111"));//删除指定索引处的元素list.remove(4);System.out.println(list);//获取子集(包括下标为1的元素,不包括下标为4的元素)System.out.println(list.subList(1, 4));}}/*结果:[疯狂Java讲义, 轻量级Java EE, 经典Java EE]疯狂Java讲义  轻量级Java EE  经典Java EE[疯狂Java讲义, 111, 222, 轻量级Java EE, 经典Java EE][疯狂Java讲义, 111, 222, 333, 经典Java EE][疯狂Java讲义, 111, 222, 333, 111, 经典Java EE]list.indexOf("111") = 1list.lastIndexOf("111") = 4[疯狂Java讲义, 111, 222, 333, 经典Java EE][111, 222, 333]*/

下面再看一下List判断2个对象相等的标准。

List判断2个对象相等,只要通过equals方法比较返回true即可。

package org.lgy.study.collection;import java.util.List;import java.util.ArrayList;import java.util.Set;import java.util.HashSet;public class ListTest{public static void main(String[] args){method2();}public static void method2(){List list = new ArrayList();//由于List集合中可以存放重复的元素,当向List集合中添加元素时(没有指定具体的索引位置),//List将直接把元素添加在集合最后。list.add(new ListA(20));list.add(new ListA(10));list.add(new ListA(40));list.add(new ListA(30));System.out.println(list);//删除集合中的元素有两中方式,一种是指定对象本身,另一种是指定索引。//当指定对象本身时,系统会调用待删除对象的equals方法,依次与集合中的元素比较//当指定索引时,系统会直接删除指定索引位置处的元素。System.out.println("list.remove(new ListA(30))= " + list.remove(new ListA(30)));System.out.println(list);System.out.println("list.remvoe(2) = " + (list.remove(2).equals(new ListA(40))));System.out.println(list);/*结果:[Count = 20, Count = 10, Count = 40, Count = 30]30 equals 2030 equals 1030 equals 4030 equals 30list.remove(new ListA(30))= true[Count = 20, Count = 10, Count = 40]40 equals 40list.remvoe(2) = true[Count = 20, Count = 10]*/}}class ListA{private int count;public ListA(int count){this.count = count;}public int getCount(){return this.count;}public void setCount(int count){this.count = count;}public boolean equals(Object obj){if(this == obj)return true;if(obj != null && obj instanceof ListA){ListA a = (ListA)obj;System.out.println(this.count + " equals " + a.count);return this.count == a.count;}return false;}public String toString(){return "Count = " + this.count;}}

ListIterator接口

package java.util;public interface ListIterator<E> extends Iterator<E> {boolean hasNext();E next();boolean hasPrevious();E previous();int nextIndex();int previousIndex();void remove();void set(E e);void add(E e);}

ListIterator的简单实用:

package org.lgy.study.collection;import java.util.List;import java.util.ArrayList;import java.util.Set;import java.util.HashSet;import java.util.Iterator;import java.util.ListIterator;public class ListTest{public static void main(String[] args){method3();}public static void method3(){List list = new ArrayList();list.add("疯狂Java讲义");list.add("轻量级Java EE");list.add("经典Java EE");//使用Iterator迭代输出Iterator iterator = list.iterator();while(iterator.hasNext()){System.out.print(iterator.next() + "  ");}System.out.println();//使用ListIterator迭代输出ListIterator lit = list.listIterator();while(lit.hasNext()){System.out.print(lit.nextIndex() + ":" + lit.next() + "  ");}System.out.println();while(lit.hasPrevious()){System.out.print(lit.previousIndex() + ":" + lit.previous() + "  ");}System.out.println();//使用ListIterator向集合中添加元素lit = list.listIterator();while(lit.hasNext()){lit.add("***");lit.next();lit.add("---");}System.out.println(list);}}


0 0
原创粉丝点击