第十四章(使用集合类保存对象)

1、java中得集合对象就像是一个容器,它用来存放Java类的对象。Java中的集合类有些方便存入和取出,有些则方便查找。集合类和数组的区别是,数组的长度是固定的,集合的长度是可变的,数组用来存放基本类型,集合用来存放对象的引用常用的集合类有List集合,Set集合,和Map集合。

2、List集合包括List接口以及List接口的所有实现类。List集合中的元素许重复,个元素的顺序就是对象插入的顺序。类似java中的数组。List类继承了Collection接口,因此包含Collection中的所有方法,又因为List是列表类型,所接口还提供了一些适合自身的常用方法,都与索引有关,是以线性的方式存储对象,要使用List集合,通常先声明为List类型,之后通过List接口的实现类来对集合进行实例化:ArrayList与LinkList。获取List集合中的对象方法有两种1、通过For循环语句遍历集合2、通过创建集合对象的迭代器。

我们可以认为迭代器Iterator是指向两个元素之间的位置,我们可以使用hasNext()来判断当前位置后面是否还有元素。使用next()方法返回后面的元素,并且将位置移动到下一个元素前的位置。对于remove方法我们删除的是当前位置前面的元素,所以我们在调用remove()方法之前必须先调用至少一次next()方法。这里所说的迭代器的位置在被迭代的对象中并不存在的,只是我们为了准确的说明这个方法,而假想出来的。

用for循环照样可以输出,何必再去写这么一个接口呢。这样是为了我们可以使用通用的方法

对于实例化List集合类

如果你不加<String>这个的话 你的List就可以放进去所有类型的对象 取出来的时候都变成了Object对象 使用的时候需要进行强制类型转换 加了<String>的话List只能存String 取出来也是String不需要强制类型转换

3、ArraryList类实现了可变数组,允许包含所有元素,包括NULL.缺点是向指定位置插入或者删除元素的速度比较慢

package com.lenovo.dishisizhang;


import java.awt.List;

import java.util.ArrayList;


public class ArrayListTest {

// String a ="a",z ="z",c ="c",d="d",apple="apple";

  public static void main(String[] args) {

java.util.List list = new ArrayList();

for (int i = (int)'a'; i <= (int)'z'; i++) {

list.add(i);

}

int i = (int)(Math.random()*(list.size()-1));

System.out.println("随机获取的数为:"+i);

System.out.println("随机获取集合中的元素:"+list.get(i));

    list.remove(i);//////

    System.out.println("索引位置为10的元素是:"+list.get(10));

}

}

4、Set集合中的对象不按照特定的方式排序,只是简单地加入集合中,但Set集合中不能包含重复对象

  Set集合有Set接口和Set接口的实现类组成,Set接口继承了Collection接口,因此包含了Collection接口的所有方法。Set接口的实现类有HashSet和TreeSet

有与set集合不允许重复的值,因此可以使用Set集合中的addAll()方法,将Collectiion集合添加到Set集合中,以除去重复。

由于Set集合中的对象时无循环的,遍历Set集合中的结果与插入Set集合的顺序并不相同

package com.lenovo.dishisizhang;


import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;


import javax.management.loading.PrivateClassLoader;


public class People {

private String name;

private long id_card;

public People(String name,long id_card){

// TODO Auto-generated constructor stub

this.name = name;

this.id_card=id_card;

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setId_card(long id_card) {

this.id_card = id_card;

}

public long getId_card() {

return id_card;

}

  public static void main(String[] args) {

   Set hashSet = new HashSet<People>();

   hashSet.add(new People("美女侨民", 37));

   hashSet.add(new People("美女侨民2", 38));

   hashSet.add(new People("美女侨民3", 39));

   Iterator<People> iterator = hashSet.iterator();

   System.out.println("集合中的元素是:");

   while (iterator.hasNext()) {

  People person = iterator.next();

  System.out.println(person.getName()+" "+person.getId_card());

}

}

}

5、Map没有承Collection接口,其提供的是Key到value映,射,Map中不能包含相同的Key值,每个Key值只能映射一个Value,要使用Map集合,先声明为Map类型然后通过Map接口的实现类进行实例化,Map接口的实现类常用的有HashMap、TreeMap

// List<String> list  =(List<String>) map.values();

Collection<String> list  = map.values();

第一个是不对的,map.values()返回值是Collection类型这根map接口是否为Collection类型无关

用TreeMap类实现Map集合,可以使Map集合对象存在一定的顺序

再来看看HashMap和TreeMap有什么区别。HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。 

在Map集合中

values():方法是获取集合中的所有的值----没有键,没有对应关系,

KeySet():
将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取ke

package com.lenovo.dishisizhang;


import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;


public class MapTest {

   public static void main(String[] args) {

Map map  = new HashMap();

Emp emp = new Emp("001", "张三");

Emp emp2 = new Emp("002", "张er");

Emp emp3 = new Emp("003", "张ers");

map.put(emp.getE_id(), emp.getE_name());

map.put(emp2.getE_id(), emp2.getE_name());

map.put(emp3.getE_id(), emp3.getE_name());

Set set = map.keySet();

Iterator iterator = set.iterator();

System.out.println("HashMap实现的结合无顺序:");

while (iterator.hasNext()) {

String string =(String)iterator.next();

String name =(String)map.get(string);

System.out.println(string+" "+name);

}

TreeMap treeMap = new TreeMap();

treeMap.putAll(map);

Iterator it = treeMap.keySet().iterator();

System.out.println("TreeMap类实现的Map集合,建对象升序:");

while (it.hasNext()) {

String string =(String)it.next();

String name =(String)map.get(string);

System.out.println(string+" "+name);

}

}

}

iukik