JAVA编程思想学习笔记(十)持有对象

持有对象

java实用类库提供了一套相当完整的容器类,其中基本的类型时List、Set、Queue和Map。这些对象类型称为集合类,也可以称之为容器

泛型和类型安全的容器

ArrayList是最基本最可靠的容器,你可以把它当做“可以自动扩充自身尺寸的数组”来看待。
下面是一个简单的例子:

class Apple{
	private static long counter;
	private final long id = counter++;
	public long id(){return id;}
}

public class Fruts {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList apples = new ArrayList();
		for(int i=0;i<3;i++){
			apples.add(new Apple());
		}
		for(int i=0;i<apples.size();i++){
			System.out.println(((Apple)apples.get(i)).id());
		}
	}

}

上面这种方式需要强制转型,下面使用泛型的例子:

class Apple{
	private static long counter;
	private final long id = counter++;
	public long id(){return id;}
}

public class Fruts {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Apple> apples = new ArrayList<Apple>();
		for(int i=0;i<3;i++){
			apples.add(new Apple());
		}
		for(int i=0;i<apples.size();i++){
			System.out.println(apples.get(i).id());
		}
	}

}

基本概念

基本上可以分为两种类型:
Collection类型:一个独立元素序列,这些元素都服从一条或多条规则。

  1. List:必须按照插入的顺序保存元素。
  2. Set:不能有重复的元素。
  3. Queue:按照排队规则来确定对象产生的顺序。

Map类型:一组成对的“键值对”对象,允许用“键”来查找“值”。

添加一组元素

java.util包中的Arrays和Collections类中都有很多实用方法,可以在一个Collection 中添加一组元素,注意类名中的s
下面就是添加的例子:

public class AddingGroups {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Collection<Integer> collections = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
		Integer[] moreints = {6,7,8,9,10};
		collections.addAll(Arrays.asList(moreints));
		Collections.addAll(collections,11,12,13,14,15);
		Collections.addAll(collections,moreints);
		List<Integer> list = Arrays.asList(16,17,18,19,20);
		list.set(1, 99);
		
		System.out.println(collections);
		System.out.println(list);
		
	}

}

容器的打印

下面例子将容器的内容打印出来,便于观察容器的存储方式:

public class PrintCollection {
	static Collection fill(Collection<String> collection){
		collection.add("A");
		collection.add("B");
		collection.add("C");
		collection.add("C");
		return collection;
	}
	
	static Map fill(Map<String,String> map){
		map.put("A", "1");
		map.put("B", "2");
		map.put("C", "3");
		map.put("C", "4");
		return map;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(fill(new ArrayList<String>()));
		System.out.println(fill(new LinkedList<String>()));
		System.out.println(fill(new HashSet<String>()));
		System.out.println(fill(new TreeSet<String>()));
		System.out.println(fill(new HashMap<String,String>()));
		System.out.println(fill(new TreeMap<String,String>()));
		System.out.println(fill(new LinkedHashMap<String,String>()));
	}

}

运行结果:

[A, B, C, C]
[A, B, C, C]
[A, B, C]
[A, B, C]
{A=1, B=2, C=4}
{A=1, B=2, C=4}
{A=1, B=2, C=4}

对于这个结果可以看出,Set类型,元素不能重复;Map类型,对于每个键,只存储一次;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值