黑马程序员-------Java集合

来源:互联网 发布:linux 7 配置ip地址 编辑:程序博客网 时间:2024/06/11 18:35

------------- java培训android培训、java博客、java学习型技术博客、期待与您交流! --------------

集合框架的构成及分类



Collection接口有两个子接口:

List(列表) ,Set(集)


  • List:可存放重复元素,元素存取是有序的。
  • Set:不可以存放重复元素,元素存取是无序的。


List接口中常用类

Vector:线程安全,但速度慢,已被 ArrayList替代。

ArrayList:线程不安全,查询速度快。

LinkedList:链表结构,增删速度快。

取出LIst集合中元素的方式:

get(int  index):通过脚标获取元素。

iterator():通过迭代方法获取迭代器对象

import java.util.*;/*去除ArrayList集合中的重复元素。*/class ArrayListTest {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {ArrayList al = new ArrayList();al.add("java01");al.add("java02");al.add("java01");al.add("java02");al.add("java01");//al.add("java03");/*在迭代时循环中next调用一次,就要hasNext判断一次。Iterator it = al.iterator();while(it.hasNext()){sop(it.next()+"...."+it.next());}*//**/sop(al);al = singleElement(al);sop(al);}public static ArrayList singleElement(ArrayList al){//定义一个临时容器。ArrayList newAl = new ArrayList();Iterator it = al.iterator();while(it.hasNext()){Object obj = it.next();if(!newAl.contains(obj))newAl.add(obj);}return newAl;}}


迭代

迭代是取出集合中元素的一种方式。

因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。

用法:

for(Iterator iter = iterator();iter.hasNext();  ){System.out.println(iter.next());}
Iterator iter = l.iterator();while(iter.hasNext()){System.out.println(iter.next());}

Set接口中常用的类

  • HashSet:线程不安全,存取速度快。

 它是如何保证元素唯一性的呢?



  • TreeSet: 线程不安全,可以对Set集合中的  元素进行排序。

import java.util.*;/*|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。HashSet是如何保证元素唯一性的呢?是通过元素的两个方法,hashCode和equals来完成。如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不会调用equals。注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。|--TreeSet:Set集合的功能和Collection是一致的。*/class HashSetDemo {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {HashSet hs = new HashSet();sop(hs.add("java01"));sop(hs.add("java01"));hs.add("java02");hs.add("java03");hs.add("java03");hs.add("java04");Iterator it = hs.iterator();while(it.hasNext()){sop(it.next());}}}


Map集合常用类

  • Hashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
  • HashMap:线程不安全,速度快,允许存放null键,null值。
  • TreeMap:对键进行排序,排序原理与TreeSet相同。

/*map集合的两种取出方式:1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.EntryEntry其实就是Map中的一个static内部接口。为什么要定义在内部呢?因为只有有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。*/import java.util.*;class MapDemo2 {public static void main(String[] args) {Map<String,String> map = new HashMap<String,String>();map.put("02","zhangsan2");map.put("03","zhangsan3");map.put("01","zhangsan1");map.put("04","zhangsan4");//将Map集合中的映射关系取出。存入到Set集合中。Set<Map.Entry<String,String>> entrySet = map.entrySet();Iterator<Map.Entry<String,String>> it = entrySet.iterator();while(it.hasNext()){Map.Entry<String,String> me = it.next();String key = me.getKey();String value = me.getValue();System.out.println(key+":"+value);}/*//先获取map集合的所有键的Set集合,keySet();Set<String> keySet = map.keySet();//有了Set集合。就可以获取其迭代器。Iterator<String> it = keySet.iterator();while(it.hasNext()){String key = it.next();//有了键可以通过map集合的get方法获取其对应的值。String value  = map.get(key);System.out.println("key:"+key+",value:"+value);}*/}}


集合框架中的工具类

  • Collections

对集合进行查找

取出集合中的最大值,最小值

对List集合进行排序

……

  • Arrays

将数组转成List集合

对数组进行排序

对数组进行二分查找


  • 新增for语句

Collection在JDK1.5后出现的父接口Iterable就是提供了这个for语句。

格式:

for(数据类型 变量名 : 数组或Collection集合)

{

执行语句;

}

简化了对数组,集合的遍历。




------------- java培训android培训、java博客、java学习型技术博客、期待与您交流! --------------