【JAVA语法】持有对象--Java中List的用法

写在前面:

    我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽。同是学习的同学也同样希望互相交流,取长补短。

                                                                                                                                                      ——[email protected]

以下内容是学习《java编程思想》(《Thinking in Java》)的笔记,包括对习题的实现。

java容器类库中的两种主要类型:他们的区别在于容器中的每个“槽”保存的元素个数

1.Collection在每个槽中只能保存一个元素,此类容器包括

    <1.1>list,它以特定的顺序保存一组元素

    <1.2>set, 元素不能重复

    <1.3>Queue,只允许在容器的一端插入对象,并从另一端移除对象

2.Map在每个槽内保存了两个对象,即键和与之关联的值



在一个Collection中添加一组元素的方法。Arrays.asList()接受一个数组或是一个用逗号分隔的元素列表,并将其转换为一个List对象,

例如使用Collection构造器来初始化容器

Collection collection = new ArrayList(Arrays.asList(1,2,3,4,5));

Collections.addAll()方法接受一个Collection对象,以及一个数组或是一个用逗号分隔的列表,将元素添加到Collection中

例如:

Collections.addAll(collection,11,12,13,14,15)

一.List

List承诺可以将元素维护在特定的序列中,List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和移除元素。

有两种类型的List。(1)基本的ArrayList,它用于随机访问元素,但是在List的中间插入和移除元素较慢

(我尝试了一下两种对ArrayList的初始化方式,貌似结果没有什么区别:

public class test {
	public static void main(String[] args){
		List list = new ArrayList(Arrays.asList(1,2,3));
		List list2 = Arrays.asList(1,2,3);
		System.out.println(list.getClass());
		System.out.println(list2.getClass());
	}
}

查询api chm文档,找到ArrayList的构造函数:

【JAVA语法】持有对象--Java中List的用法_第1张图片

                             (2)LinkedList,它通过代价较低的在List中间进行插入和删除操作,提供了优化的顺序访问,LinkedList在随机访问方面相对比较慢,但是它的特性集较ArrayList更大(这个特性集我没搞懂是什么意思?)

书上的例子是以导入的Pet类为例子,而225页的练习五,要求修改例子,使用Integer而不是Pet

代码实现:

package ListContainer;




import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Random;


public class ListFeatures {
	public static void main(String[] args){
		Random random = new Random(5);
		List intLists = new ArrayList(Arrays.asList(40,20,3,4,5,6,7,8));//构造一个集合
		System.out.println("1: "+intLists);
		Integer i = new Integer(10);
		intLists.add(i);
		System.out.println("2: "+intLists);
		System.out.println("3: "+intLists.contains(i));
		intLists.remove(i);//去掉元素i
		Integer i2 = intLists.get(2);
		System.out.println("4: "+i2+" "+intLists.indexOf(i2));
		Integer i3 = new Integer(5);
		System.out.println("5: "+intLists.indexOf(i3));
		System.out.println("6: "+intLists.remove(i3));
		System.out.println("7: "+intLists.remove(i2));
		System.out.println("8: "+intLists);
		intLists.add(3,new Integer(19));
		System.out.println("9: "+intLists);
		List sub = intLists.subList(1, 4);
		System.out.println("subList: "+sub);
		System.out.println("10: "+intLists.containsAll(sub));
		Collections.sort(sub);
		System.out.println("sorted subList: "+sub);
		System.out.println("11: "+intLists.containsAll(sub));
		Collections.shuffle(sub,random);
		System.out.println("shuffle subList: "+sub);
		System.out.println("12: "+intLists.containsAll(sub));
		List copy = new ArrayList(intLists);
		sub = Arrays.asList(intLists.get(1),intLists.get(4));
		System.out.println("sub: "+sub);
		copy.retainAll(sub);//交集操作,保留所有copy与sub相同的元素,这样子看来应该还是sub
		System.out.println("13: "+copy);
		copy = new ArrayList(intLists);
		copy.remove(2);
		System.out.println("14: "+copy);
		copy.removeAll(sub);//移除sub的元素
		System.out.println("15: "+copy);
		copy.set(1, 99);//和之前的add方法不同的是,add是在这个位置增加一个元素,而set方法是在指定位置Replace an element
		System.out.println("16: "+copy);
		copy.addAll(sub);//再把sub添加回来
		System.out.println("17: "+copy);
		System.out.println("18: "+intLists.isEmpty());//判断是否为空
		intLists.clear();//清空容器
		System.out.println("19: "+intLists);
		System.out.println("20: "+intLists.isEmpty());
		intLists.addAll(Arrays.asList(6,5,4,3,2,1));
		System.out.println("21: "+intLists);
		Object[] o = intLists.toArray();
		System.out.println("22: "+o[3]);
		Integer[] array = intLists.toArray(new Integer[0]);//toArray方法,作用是把任意的Collection转换成一个数组,无参的时候返回一个Object类型的数组,有参数的时转为与参数同类型的数组,(假如这个参数(数组)能通过参数类型检查)
		System.out.println("23: "+array[3]);
		
		
		
	}
}
 
  

实现结果:

【JAVA语法】持有对象--Java中List的用法_第2张图片

关于java.util.Random这个类,构造函数中Random()包括无参和有参Random(seed),有参构造方法的种子有何作用 在另一篇文章中有说明

List的两种实现方式ArrayList和LinkedList,顾名思义一个底层为数组,另一个底层为链表。

具体的区别,点击这篇文章http://blog.csdn.net/qq_37935670/article/details/79594159

你可能感兴趣的:(JAVA语法)