JAVA中的容器 2

332 阅读3分钟

1.容器类

初步了解容器后,我们来讲讲容器类,又被称作集合框架.

首先我们来认识一下常见的两种容器体系

集合框架的简单体系如下:

  • Collection 存储单个数据的容器体系,它也是容器体系的上层接口,其下有两个子接口:

1.Set 没有顺序,不可重复 2.List 有顺序,可以重复

  • Map 键值对形式数据的容器体系

2.Collection

我们来具体尝试下collection中的一些常用方法

首先我们新建类在main的主方法中new一个collection对象

Collection col=new ArrayList();
//以此对象使用其中的方法

1.add 添加

col.add(123);
col.add("哈哈");
col.add(false);
col.add('c');

容器可以存储多个数据类型,不同于数组

2.size 返回容器大小

System.out.println(col.size());

即返回容器里存储的数据数量

3.remove 移除

col.remove(123);
System.out.println(col);

会移除容器中的数据(123)

4.iterator 遍历

Iterator it=col.iterator();
//2.判断是否存在下一个元素
while(it.hasNext()){
//3.获取元素
System.out.println(it.next()); //获取下一个元素
}

遍历输出容器里全部数据

还有一些方法感兴趣的同学也可以自己尝试一下

3.List接口

list作为子接口,有序(索引)可重复,新增了一些根据索引操作的方法

接下来展示方法实际中的应用

public class ListDemo01 {
	public static void main(String[] args) {
		//添加泛型  增可读性
		List<Integer> ls=new ArrayList();
		//存储班级学生分数  
		ls.add(2);
		ls.add(0);
		ls.add(1);
		ls.add(4);
		ls.add(3);
		System.out.println(ls);
		//add(index, element) 添加
		ls.add(3, 3);
		System.out.println(ls);
		
		//E set(int index, E element)  修改
		ls.set(5, 5);
		System.out.println(ls);
		
		// E get(int index)  获取
		System.out.println(ls.get(2));
		
		// E remove(int index)    
		//当容器中的数据也是整数时候,以索引为主  
		//下课测试,如果出现多个相同的值,移出时候删除多个,还是第一个
		System.out.println(ls.remove(2));
		System.out.println(ls);
		
		 //List<E> subList(int fromIndex, int toIndex)  不包含结束索引
		System.out.println(ls.subList(1, 4));
		System.out.println(Arrays.toString(ls.toArray()));
		System.out.println(ls.toArray()[1]);
		
		//普通for
		for(int i=0;i<=ls.size()-1;i++){
			System.out.println(ls.get(i));
		}
	}
}

4.ArrayList

ArrayList是List的子类,它与HashSet相反,允许存放重复元素,因此有序.

ArrayList的底层实现是由可变数组(通过一些方法)实现的,通过数组拷贝实现容器可以根据内容进行动态扩容;

ArrayList的优点是遍历和获取的效率高,因为我们可以根据索引直接定位到我们需要的元素;

ArrayList的缺点是增删的效率低;

当ArrayList的容量不足以继续存放对象时,会自动的扩容,每次扩容原先容器大小的1.5倍;

ArrayList可以使用多态

在单线程环境下,在大量做查询的业务下,适合使用ArrayList

5.在定义一个容器时为什么使用泛型

在JDK1.4之前类型不明确:

装入集合的类型都被当做Object对待,从而失去自己的实际类型.从集合中取出时往往需要转型,效率低,容易产生错误.

  • 使用泛型之后可以增强程序的可读性和稳定性.
  • 使用泛型,保留了容器中元素的类型,安全省心的使用容器.

Map容器明天再与大家结合Set接口进行分析比较 拜拜