List

List
1.实现比较
名称 存储 优势 劣势
arrayList 实质是数组 便于查询 数据变更,需移动插入或删除位置后方的元素
linkedList 链式存储 便于修改 查询时逐个Node进行next元素查找比较


数组存储使用连续的存储空间进行存储

2.subList


import java.util.ArrayList;
import java.util.List;

public class ListTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		List<String> l = new ArrayList<String>();
		l.add("1");
		l.add("2");
		l.add("3");
		l.add("4");
		l.add("5");
		
		List<String> s = l.subList(1, 3);
		s.set(1, "111");
		
		System.out.println(l);
	}

}


输出:

[1, 2, 111, 4, 5]

结论:
取出集合中的子集合,实质上并没有创建新的集合,即对子集合的修改会影响到原集合。

3.Collection 与 Array的转换

		List<String> l = new ArrayList<String>();
		l.add("1");
		l.add("2");
		l.add("3");
		l.add("4");
		l.add("5");

		String [] a = new String[l.size()];
		l.toArray(a);
		System.out.println(String.valueOf(a));


说明:
若数组的大小大于list.size ,则使用当前数组进行数据的返回值;反之,新创建数据返回
为避免内存消耗,新建数据时指明大小与list相同


		String str = "1,2,3,4,5,6,7";
		List<String> ls = Arrays.asList(str.split(","));
		List<String> lsn = new ArrayList<String>(ls.size());
		lsn.addAll(ls);
		System.out.println(lsn);



说明:
通过asList方法得到的List 并非ArrayList,不支持 add/remove等方法的使用,否则会提示异常——“不支持方法调用”
    // asList实质调用如下方法
    // 下面的ArrayList非上述ArrayList,而是一个内部类,由于其继承AbstraceList类
    // 所以相应的list的方法,也可以调用,编译时不会报错,但运行时会出现异常
    // 调用 add /remove 方法时,会提示不支持此方法的调用 
    private static class ArrayList<E> extends AbstractList<E>
	implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
	private final E[] a;

	ArrayList(E[] array) {
            if (array==null)
                throw new NullPointerException();
	    a = array;
	}
}


解决方法是:套用一层,再将此list转换为真正的ArrayList

猜你喜欢

转载自mingyundezuoan.iteye.com/blog/2363966