集合的理解


集合:

是什么?存数据的,以对象的形式存数据,所有存放的都是对象。

 

数组也是存数据的,有什么区别啊?

1.      数组的长度是固定的,集合的长度是可变的。

2.      数组可是存放基本数据类型和对象(应用数据类型),而集合只能存储对象。

3.      从存放的数据类型上,集合可以存多种对象,而数组只能存同一种。

 

集合的体系:

    集合就像容器:容器有很多种,每一种的结构,不相同,他们的用途也不像同。

整个集合体系是以跟接口collection向下发展的 ,它有两个常用的只接口。List和Set。

List:有序,有索引,可以重复。Set:无序,没索引,不可以重复,保证元素唯一,怎么保证的呢?(注意:set子类只能用迭代取出)

List下面有三个常用的类,vertor,arraylist,linkedlist。

Vertor:jdk1.0就有的类,同步,增删改查都很慢,被arraylist取代了

arraylist:数组结构,查找快,不同步的,

linkedlist链表结构,不同步,增删元素的速度非常快。

Set下面也有两个常用的类:hashset  ,treeset

Hashset:底层是哈希表结构。哈希表也用的是数组结构,他什么怎么保证元素的唯一性呢?

他是通过存储对象的hashcode和equals方法保证元素唯一性的。将数组分区。用元素的特有数据进行哈希运算。判断相应的区有没有这个哈希值,没有就存储,如果有在进行equals运算判断是不是同一个元素,相同不存,不同存储。(补充说明:hashcode和equals方法是object类中的方法。用hashcode存储元素后就不要给他的特有数据,可能会发生内存泄漏。如果要存储对象,对象需要复写hashcode和equals方法,这样存到hashset中的元素才能是唯一的。)

Treeset :底层二叉树结构。对Set集合中的元素的进行指定顺序的排序。那他是怎么保证唯一性的呢?

TreeSet保证元素唯一性的方式:就是参考比较方法的结果是否为0,如果return 0,视为两个对象重复,不存.

他的排序依靠两种方式:

1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。

2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。

两种方式第二中跟好用。(注意:如果有多个比较条件,要用三元运算符)

 

Map:

    双列集合,存放键值对,元素取出有两种方式:keyset  enrtyset

    子类有:Hashatable,hashmap,treemap

  Hashatable不能存放null键和null值,不同步。而hashmap可以存放空键值,同步。Treemap底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。(hashtable:有一个子类properties,可以将键值进行持久化存储的对象,比较重要。)

集合重点说明:

1对于list和其子类,由于是数组结构,存储元素有索引,所有取出元素的方式有很多种.

如:

public static void main(String[] args) {
	List list = new ArrayList();
	list.add("abc0");
	list.add("abc1");
	list.add("abc2");
	//--------------方式1----------------------
	Iterator it = list.iterator();
	while(it.hasNext()){
		System.out.println(it.next());
	}
	//---------------方式2 ----------------------
	for(Iterator it = list.iterator();it.hasNext(); ){
		System.out.println(it.next());
<span style="font-family: Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255); ">                              用第二中比较高级。</span>
     //-------------方式3------------
       for(int x=0;x< list.size;x++){
              System.out.println(list.get(x));
  
}

	}
}

(注意:在迭代集合过程中,不能对集合进行其他操作,如添加删除等,这时就需要迭代器可以对迭代器的对象进行操作,但是由于Iterator迭代器只有 remove功能,所以建议使用其子接口ListIterator,它具备删除 remove 添加 add 修改 set 等功能,但此功能是List特有
 ListIterator列表迭代器)


2对于set集合:

     用Hashset集合存储元素,保证唯一,让元素复写hashcode和equals放法(可在元素中中用ALT+SHIFT+S快捷复写)

      用Treeset集合存储元素,保证唯一,有两种方法。(这是重点)。

3对于map集合:

      元素的两种取出方式:

把map集合转成set的方法:SetkeySet(); Set entrySet();//取的是键和值的映射关系。

取出map集合中所有元素的方式一:keySet()方法。

(A)可以将map集合中的键都取出存放到set集合中。对set集合进行迭代。迭代完成,再通过get方法对获取到的键进行值的获取。
		/*Set keySet = map.keySet();
Iterator it = keySet.iterator();
while(it.hasNext()) {
Object key = it.next();
Object value = map.get(key);
System.out.println(key+":"+value);
}
..........................................................................................
Set keySet = map.keySet();
For(Iterator it = keySet.iterator();it.hasNext();)
 Objcet  key = it.next();
 Objcet  value =map.get(key);
System.out.println(key+":"+value);

(B)取出map集合中所有元素的方式二:entrySet()方法。

Set entrySet = map.entrySet();
Iterator it = entrySet.iterator();
while(it.hasNext()) {
	Map.Entry  me = (Map.Entry)it.next();
	System.out.println(me.getKey()+"::::"+me.getValue());
}
.................................
Set entrySet = map.entrySet();
for(Iterator it = entrySet.iterator();it.hasNext();){
     Entry entry=(Map.Entry)it.next;
	Objcet key=entry.getKey();
	Objcet value = entry.getValue();
	System.out.println(key+":"+value);
}

4.collection和collections 以及arrays。

Collections是集合的工具。里面提供了一些静态的方法。

如:获取集合的枚举:

    Enumeration en = Collections.enumeration(al);

Arrays:用于操作数组对象的工具类,里面都是静态方法。

asList方法:将数组转换成list集合。

集合变数组: toArray();






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值