黑马程序员----集合类
2014-02-23 21:18
232 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
集合与数组
数组虽然也可以存储对象,但长度是固定的;
集合长度是可变的。数组中可以存储任意数据类型,集合只能存储对象。
集合的底层运用的还是数组!
集合框架
![](https://img-blog.csdn.net/20140221100510656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjU0ODUyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
两大接口
Java集合类主要由两个接口派生出来:
Collection
Set :不能存放重复对象
List :可存放重复对象,有序
Map
Map :可对集合数据排序
迭代器
因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
迭代器的next方法返回值类型是Object,所以要记得类型转换。(学到泛型就可以消除强转!)
Iterator iter = l.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
ListIterator迭代器可以在迭代过程中,对集合中的元素进行增删改!LIst集合专用
Vector:线程安全,但速度慢,已被ArrayList替代。
ArrayList:线程不安全,查询速度快。
LinkedList:链表结构,增删速度快。取出List集合中元素的方式:
get(int index):通过脚标获取元素。
iterator():通过迭代方法获取迭代器对象。
ArrayList和Vector类都是基于数组实现的List类,Vector比较古老,被ArrayList取代了;
ArrayList是线程不安全的,而Vector是线程安全的,但是即使这样,也不推荐使用Vector,因为Collections有方法可以得到线程安全的ArrayList对象;
Collections类: static List synchronizedList(List list)返回指定列表支持的同步(线程安全的)列表。
Set接口(元素不可以重复)
HashSet判断对象是否相等,先判断对象的hashCode()的值,false就将对象添加set中,true的话就判断对象equals()的值,false那对象不相同,true对象相同,不添加
Set是Collection子接口;
Set和Collection基本上一样,一点除外:
Set无法记住添加的顺序,不允许包含重复的元素。
当试图添加两个相同元素进Set集合,添加操作失败,add()方法返回false。
Set判断两个对象是否相等用equals,而不是使用==。
也就是说两个对象equals比较返回true,Set集合是不会接受这个两个对象的。
TreeSet的排序之自然排序
TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合里的元素按升序排列.此时需要排序元素的类必须实现Compareble接口,并覆写其int
compareTo(Object o)方法;
该方法用于比较对象,若:obj1,compareTo(obj2),返回0,表示两个对象相等,若返回一个正整数,表示obj1大于obj2,若返回一个负整数,表示obj1小于obj2;
对于TreeSet集合而言,判断两个对象相等的标准是:
compareTo()方法比较返回 0;
TreeSet的排序之定制排序
TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了:
该接口包含int compare(Object o1,Object o2)方法,用于比较两个对象的大小,比较结果和compareTo方法一致;
要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,该对象里负责集合元素的排序逻辑;
映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value。Map里的key不允许重复。通过key总能找到唯一的value与之对应。
Map里的key集存储方式和对应的Set集合中的元素存储方式一致;
学生都有一个学号,我们能点学号就能找到某个学生,好比这个学号就是key,学生就是value。
Map.Entry是Map接口的内部接口,专门用来保存key-value内容
//Map的demo
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
集合与数组
数组虽然也可以存储对象,但长度是固定的;
集合长度是可变的。数组中可以存储任意数据类型,集合只能存储对象。
集合的底层运用的还是数组!
集合框架
两大接口
Java集合类主要由两个接口派生出来:
Collection
Set :不能存放重复对象
List :可存放重复对象,有序
Map
Map :可对集合数据排序
迭代器
因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
迭代器的next方法返回值类型是Object,所以要记得类型转换。(学到泛型就可以消除强转!)
Iterator iter = l.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
ListIterator迭代器可以在迭代过程中,对集合中的元素进行增删改!LIst集合专用
List接口中常用类
Vector:线程安全,但速度慢,已被ArrayList替代。
ArrayList:线程不安全,查询速度快。
LinkedList:链表结构,增删速度快。取出List集合中元素的方式:
get(int index):通过脚标获取元素。
iterator():通过迭代方法获取迭代器对象。
ArrayList和Vector类都是基于数组实现的List类,Vector比较古老,被ArrayList取代了;
ArrayList是线程不安全的,而Vector是线程安全的,但是即使这样,也不推荐使用Vector,因为Collections有方法可以得到线程安全的ArrayList对象;
Collections类: static List synchronizedList(List list)返回指定列表支持的同步(线程安全的)列表。
Set接口(元素不可以重复)
HashSet判断对象是否相等,先判断对象的hashCode()的值,false就将对象添加set中,true的话就判断对象equals()的值,false那对象不相同,true对象相同,不添加
Set是Collection子接口;
Set和Collection基本上一样,一点除外:
Set无法记住添加的顺序,不允许包含重复的元素。
当试图添加两个相同元素进Set集合,添加操作失败,add()方法返回false。
Set判断两个对象是否相等用equals,而不是使用==。
也就是说两个对象equals比较返回true,Set集合是不会接受这个两个对象的。
TreeSet的排序之自然排序
TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合里的元素按升序排列.此时需要排序元素的类必须实现Compareble接口,并覆写其int
compareTo(Object o)方法;
该方法用于比较对象,若:obj1,compareTo(obj2),返回0,表示两个对象相等,若返回一个正整数,表示obj1大于obj2,若返回一个负整数,表示obj1小于obj2;
对于TreeSet集合而言,判断两个对象相等的标准是:
compareTo()方法比较返回 0;
public class Demo13 { public static void main(String[] args) { Set<Integer> s = new TreeSet<Integer>(); s.add(1); s.add(192); s.add(123); s.add(56); s.add(13); s.add(96); System.out.println(s);//[1, 13, 56, 96, 123, 192] } }
TreeSet的排序之定制排序
TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了:
该接口包含int compare(Object o1,Object o2)方法,用于比较两个对象的大小,比较结果和compareTo方法一致;
要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,该对象里负责集合元素的排序逻辑;
class Student1{ private Integer age; public Student1(Integer age) { super(); this.age = age; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return age + ""; } }
class MyComparator implements Comparator{ @Override public int compare(Object o1, Object o2) { if(o1 instanceof Student1 & o2 instanceof Student1){ Student1 s1 = (Student1)o1; Student1 s2 = (Student1)o2; if(s1.getAge() > s2.getAge()){ return -1; }else if(s1.getAge() < s2.getAge()){ return 1; } } return 0; }
public class Demo{ public static void main(String[] args) { Set<Student1> s = new TreeSet(new MyComparator()); /** * 要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象, * 该对象里负责集合元素的排序逻辑; */ s.add(new Student1(140)); s.add(new Student1(15)); s.add(new Student1(11)); s.add(new Student1(63)); s.add(new Student1(96)); System.out.println(s); } }
Map接口
映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value。Map里的key不允许重复。通过key总能找到唯一的value与之对应。
Map里的key集存储方式和对应的Set集合中的元素存储方式一致;
学生都有一个学号,我们能点学号就能找到某个学生,好比这个学号就是key,学生就是value。
Map.Entry是Map接口的内部接口,专门用来保存key-value内容
//Map的demo
public class TestDemo { public static void main(String[] args) { MapTest(); } //定义Map集合测试方法 private static void MapTest() { //定义一个Hashtable对象 Map hashTable=new Hashtable<String, Integer>(); hashTable.put("liuming", 23); hashTable.put("jinyao", 22); hashTable.put("ganbin", 25); //hashTable.put(null,null)会运行出错,因为Hashtable不允许存null值或null键 //Map集合获取集合的Value值有两种方式,分别是使用keySet()和entrySet()方法实现 //这里使用keySet()方法获取value值,输出结果为:25 22 23 Set keySet=hashTable.keySet(); for(Iterator it=keySet.iterator();it.hasNext();) { System.out.print(hashTable.get(it.next())+" "); } System.out.println(); //定义一个HashMap对象 Map hashMap=new HashMap<String, Integer>(); hashMap.put("xiaoming", 12); hashMap.put("xiaohua", 13); hashMap.put("gouzi", 15); hashMap.put(null,null); //这里使用获取Map集合Value值的第二种方法:entrySet()方法来实现 //entrySet()返回类型是Set<Map.Entry<k,v>>集合,里面存的类型是:键和值的映射关系。即将Map集合中映射关系存入到Set集合中 //然后通过Set集合的迭代方法取出关系,通过Map.Entry的getKey()和getValue()分别取出key键和value值。 Set<Map.Entry<String, Integer>> entrySet=hashMap.entrySet(); Iterator<Map.Entry<String, Integer> > iterator=entrySet.iterator(); while (iterator.hasNext()) { Map.Entry<String, Integer> me=iterator.next(); String key=me.getKey(); Integer value=me.getValue(); System.out.print(value+" "); } System.out.println(); //定义TreeMap集合,对存入集合中的元素进行排序 Map treeMap =new TreeMap<String, String>(); treeMap.put("bb", "yuwen"); treeMap.put("ee", "shuxue"); treeMap.put("gg", "yinyu"); treeMap.put("aa", "wuli"); treeMap.put("cc", "huaxue"); treeMap.put("dd", "shengwu"); //这里采用entrySet()方法来取元素,结果为:aa-wuli bb-yuwen cc-huaxue dd-shengwu ee-shuxue gg-yinyu //通过取得结果我们会发现TreeMap按键对存入的元素进行了排序。联想到TreeSet,我们可以知道TreeSet和TreeMap都具有排序功能 Set<Map.Entry<String, String>> teSet=treeMap.entrySet(); Iterator<Map.Entry<String, String>> iterator2=teSet.iterator(); while (iterator2.hasNext()) { Map.Entry<String, String> me=iterator2.next(); String key=me.getKey(); String value=me.getValue(); System.out.print(key+"-"+value+" "); } } }
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
相关文章推荐
- 黑马程序员-----集合
- 黑马程序员——java编程那些事儿____集合框架工具类
- 黑马程序员——JAVA基础----集合框架(二)
- 黑马程序员_集合框架
- 黑马程序员---集合
- 【黑马程序员】StringBuffer,Array,Integer,BigInteger,Date,Calendar,集合——Java复习笔记
- [黑马程序员]集合--TreeSet
- 黑马程序员 + 第15天 集合
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- 黑马程序员——java复习总结——集合框架
- 黑马程序员--07.集合框架--03.【列表List集合的共性方法】【列表迭代器ListIterator】
- 黑马程序员-队Collection集合 Map集合的小总结
- 黑马程序员———集合及其collection接口及其子类的简单介绍
- 黑马程序员--07.集合框架--06.【HashSet】
- 黑马程序员:Java基础——List集合共性方法,Iterator迭代和集合具体对象的特点
- 黑马程序员-Map集合
- 黑马程序员-JAVA基础-Java 集合之List 集合
- 黑马程序员 集合框架
- 黑马程序员 集合ArrayList、HashSet和TreeSet的使用
- 黑马程序员_java编程基础17 集合框架Map