第十四章(使用集合类保存对象)
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
本文出自 “autoComplete” 博客,转载请与作者联系!
原文地址:http://7129486.blog.51cto.com/7119486/1541394