Java集合框架小总结

总结一下在Java中有着重要地位的一类工具----集合

集合在Java.util包中,能容纳不定数量的元素的容器。

先说他与数组的区别

1,  容器可以容纳数量不确定的元素,我们不用编程实现对窗口容量的控制是最基本的,它所提供的一系列对容器中元素操作的方法更是数组不能完成的。

2,  容器只能容纳对象,但是这点已经不重要了,Java可以对基本类型的元素进行自动打包和解包,我们不用管存在容器中的数到底是包装类型的还是基本类型的。

3,  还有一点就是数组没有对多线程进行处理,而集合容器中既有线程不安全而高效的方法也有线程高效的方法。

4,  对如果对一系列元素都是简单的操作使用数组效率可以会高一点。

Collection

集合主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。

下面是在网上找来的Java集合框架的结构图(太懒了就不去画了)


Map

这是Collection的各接口与实现类的继承图

其中的Set和List是Collection的子接口,也是我们平常最最常用的两个接口,Queue是队列数据结构,与Liste很相似,我们可以完全用List实现它的功能。


Map实现类用于保存具有映射关系的数据(key-value)。

看名字就知道这个HashMap与HashSet,TreeMap与TreeSet分别有着什么关系,想想也对把Map里的Value都去掉,只剩下Key就是一个Set了!!据说Java内部就是这么实现的,先实现Map,然后将Map里的Value设为null就可以当Set用了。看看Set内部的结构:

set

嘻嘻,在另一篇里拉过来的图。

拿过来Collection里的方法声明:

methods

关于Collection下实现类的构造方法和add,remove方法见一篇(set小结

遍历Collection的方法


1,使用Iterator接口

Iterator也是集合框架下的重要接口,专门用来进行遍历,中文名称是迭代器。

Iterator中有三个方法:

iterator

这种方法在遍历的过程中只能删除集合中的元素,而不能对集合进行任意的修改。

2,  使用加强的for循环,这种方法只可以对集合读取,不要对正在遍历的集合进行修改。

3,  针对List还可以使用普通的for循环来做,因为List是可以通过索引得到元素的,而且这种方式可以对集合进行任何操作。

下面的代码:

package cn.com.aa.test;

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

public class TestCollection {

	public static void main(String[] args) {
		List<Dog> list = new ArrayList<Dog>();
		list.add(new Dog(1));
		list.add(new Dog(2));
		list.add(new Dog(3));
		list.add(new Dog(4));

		// 使用增加的for循环
		for (Dog dog : list) {
			System.out.println(dog);
			// list.remove(1); //出错,不能增不能删
		}

		// 使用Iterator接口
		Iterator<Dog> it = list.iterator();
		while (it.hasNext()) {
			Dog dog = it.next();
			System.out.println(dog);
			if (dog.getWeight() == 2) {
				it.remove();// 这里只能删除,不能增加
			}
		}

		// 使用普通的for循环
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
			// 这里可以对list进行增减都可以
		}
	}
}

class Dog {
	private int weight;

	public Dog(int weight) {
		super();
		this.weight = weight;
	}

	@Override
	public String toString() {
		return "" + this.weight;
	}

	public int getWeight() {
		return weight;
	}

	public void setWeight(int weight) {
		this.weight = weight;
	}

}

Map里的方法声明:

MapMethod

其中的大部分方法都能看到名字就知道其作用,简单记几个重要的方法。

1,  put方法:将一个键值对放到Map中,要使用泛型。使用put方法会有一个value.class类型的返回值。如果加入的键值对中的键已经存在,则会返回原来的键值对的value,并且将map中的value更新为新的值。

2,  remove方法,将Map中对应Key的键值对删除,同时将键值对的value作为返回值返回。

3,  keySet方法,返回一个包含所有Key的Set,可以用来遍历Map。

4,  entrySet方法,返回一个Set,而Set所能容纳的类型是Map.Entry<K, V>,就是将键和值包装为一个对象了,也用于Map的遍历

上面已经说了几个Map遍历时使用的方法,所以直接看代码;

package cn.com.aa.test;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestMap {

	public static void main(String[] args) {
		Map<String, String> map1 = new HashMap<String, String>();
		System.out.println(map1.put("1", "a"));
		System.out.println(map1);
		System.out.println(map1.put("1", "b"));
		System.out.println(map1);
		
		map1.put("2", "b");
		map1.put("3", "c");
		map1.put("4", "d");
		
		//使用KeySet方法遍历
		Set<String> set1 = map1.keySet();
		for (String str : set1) {
			System.out.println(str + ":" + map1.get(str));
		}
		
		//使用Map.Entry的方法进行遍历
		Set<Map.Entry<String, String>> set2 = map1.entrySet();
		//这里也可以使用Iterator接口来进行遍历
		for (Map.Entry<String, String> entry : set2) {
			System.out.println(entry.getKey() + ":" + entry.getValue()); 
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值