黑马程序员-----java 集合框架(学习日记)

  --------android培训java培训、期待与您交流! ----------

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

java集合框架

1. 什么是框架:类库的集合

2.集合框架:用来表示和操作的统一的架构,包含了实现集合的接口与类

3.集合:存放数据的容器

   集合框架包含了两部分:一部分是接口,一部分是类

4.为什么会出现接口:因为集合框架中的很多类 功能是相似的,所以用接口来规范类。


集合Collection接口  

Collection是集合接口
        |————Set子接口:无序,不允许重复。
        |————List子接口:有序,可以有重复元素。
 
区别:Collections是集合类
 
Set和List对比:
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
 
Set和List具体子类:
Set
        |————HashSet:以哈希表的形式存放元素,插入删除速度很快。
 
List
        |————ArrayList:动态数组
        |————LinkedList:链表、队列、堆栈。
 
Array和java.util.Vector
Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。

--Collection 是任何对象组,元素各自独立,通常拥有相同的套用规则。Set List由它派生。

基本操作  增加元素add(Object obj); addAll(Collection c);  

删除元素 remove(Object obj); removeAll(Collection c); 

求交集 retainAll(Collection c);  

删除元素 remove(Object obj); removeAll(Collection c); 

求交集 retainAll(Collection c);   

访问/遍历集合元素的好办法是使用Iterator接口(迭代器用于取代Enumeration)

<span style="font-size:14px;">Public interface Iterator{ 

    Public Boolean hasNext(}; 

    Public Object next(}; 

    Public void remove(}; 

} </span>


集合特点:

  • List:保证以某种特定插入顺序来维护元素顺序,即保持插入的顺序,另外元素可以重复。
  • ArrayList:是用数组实现的,读取速度快,插入与删除速度慢(因为插入与删除时要移动后面的元素),适合于随机访问。
  • Vector:功能与ArrayList几乎相同,也是以数组实现,添加,删除,读取,设置都是基于线程同步的。
  • LinkedList:双向链表来实现,删除与插入速度快,读取速度较慢,因为它读取时是从头向尾(如果节点在链的前半部分),或尾向头(如果节点在链的后半部分)查找元素。因此适合于元素的插入与删除操作。
  • Set:维持它自己的内部排序,随机访问不具有意义。另外元素不可重复。
  • HashSet:是最常用的,查询速度最快,因为 内部以HashMap来实现,所以插入元素不能保持插入次序。
  • LinkedHashSet:继承了HashSet,保持元素的插入次序,因为内部使用LinkedHashMap实现,所以能保持元素插入次序。
  • TreeSet:基于TreeMap,生成一个总是处于排序状态的set,它实现了SortedSet接口,内部以 TreeMap来实现
  • TreeMap:键以某种排序规则排序,内部以red-black(红-黑)树数据结构实现,实现了SortedMap接口

对List的选择:

  • 对于随机查询与迭代遍历操作,数组比所有的容器都要快。
  • 从中间的位置插入和删除元素,LinkedList要比ArrayList快,特别是删除操作。
  • Vector通常不如ArrayList快,则且应该避免使用,它目前仍然存在于类库中的原因是为了支持过去的代码。
  • 最佳实践:将ArrayList作为默认首选,只有当程序的性能因为经常从list中间进行插入和删除而变差的时候,才去选择LinkedList。当然了,如果只是使用固定数量的元素,就应该选择数组了。

使用LinkedList模拟 一个堆栈数据结构。
<span style="font-family:SimSun;"><span style="font-size:14px; white-space: normal;">import java.util.*;</span><span style="font-size:14px;">
class LinkedList
{
	public static void main (String[] args)
	{
		Duilie d1 = new Duilie();
		d1.myAdd("java01");
		d1.myAdd("java02");
		d1.myAdd("java03");
		d1.myAdd("java04");
		
		System.out.println(d1.myGet());
	}

	
}

class Duilie
{
	private LinkedList link;
	Duilie()
	{
		link = new LinkedList();
	}
	
	public void myAdd(Object obj)
	{
		link.addFirst(obj);
	}
	public Object myGet()
	{
		return link.removeLast();
	}
	public boolean isNull()
	{
		return ( link.isEmpty();
	}
}</span>
</span>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值