java中的容器和c++中的容器类似,一些概念性的东西都是一样的,不一样的就是用法了。所以我们来看看他们底层的实现哪些是类似的,然后看看如何使用API。下面的这幅图很重要,记住这个用的时候就不愁啦!java将容器分为存储键值对的和存储普通对象的,Map是用来存储键值对的,Collection这个接口的子类是用来存储普通对象的。Set就类似于c++中的set,元素是不可以重复的,底层实现是hash表,List存放的元素可以重复,逻辑上就是个线性表,LinkedList就是用链表实现的,而ArrayList是用数组实现的。它们分别类似于c++中的list和vector。功能上的区别就是这样,到时候根据具体的业务逻辑选择就可以了!

容器类

 

先来看一下List这个接口的子类的一些API的用法,后续的博客介绍其他的容器类。

package zaojiahua;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class Test
{
	public static void main(String args[])
	{
		//使用java中的泛型,和c++中的模板类似
		ArrayList<String> list = new ArrayList<String>();
		//java中的集合不可以添加基本数据类型,必须是引用数据类型,如果要添加
		//基本数据类型,可以使用包装类
		list.add("aaa");
		//添加相同的对象,ArrarList在逻辑上是线性表,类似c++中的vector
		list.add("aaa");
		list.add("bbb");
		System.out.println(list);
		//删除,可以传入下标,也可以传入元素
		String str = list.remove(0);
		System.out.println("删除的元素为:"+str);
		boolean ret = list.remove("aaa");
		System.out.println(ret);
		System.out.println(list);
		//清空所有的元素
		list.clear();
		System.out.println(list);

		//这个逻辑上也是线性表,但是底层使用的是链表,类似c++中的list
		LinkedList<String> link = new LinkedList<String>();
		link.add("xiaota");
		link.add("zaojiahua");
		link.add("www");
		//在指定的位置上添加元素
		link.add(0, "www");
		//返回容器中元素的个数
		int size = link.size();
		System.out.println("元素个数为:"+size);
		//判断是否包含某个元素
		System.out.println("是否包含xiaota:"+link.contains("xiaota"));
		//判断是否为空
		System.out.println("集合是否为空:"+link.isEmpty());

		//迭代器的使用,容器的iterator方法返回一个迭代器对象,类似于c++中的begin方法
		Iterator<String> iterator = link.iterator();
		//以下的方法就是java中使用迭代器变量容器的方法
		while(iterator.hasNext())
		{
			String text = iterator.next();
			System.out.println(text);
			if(text.equals("www"))
			{
				//这里的remove是迭代器的方法,删除迭代器当前指向的对象
				iterator.remove();
			}
		}

		System.out.println(link);
		//修改指定位置处的元素
		link.set(0, "tata");
		System.out.println(link);
	}
}

容器类list