黑马程序员《集合(上)》

来源:互联网 发布:学霸模式软件 编辑:程序博客网 时间:2024/05/04 18:17
--------------------ASP.Net+Android+IOS开发java培训、期待与您交流! --------------------

一、集合概述

1

Collection接口有两个子接口:

List(列表) ,Set(集)

List:可存放重复元素,元素存取是有序的。

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

2

List接口中常用类

 

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

 

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

 

LinkedList:链表结构,增删速度快。取出LIst集合中元素的方式:

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

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

l

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

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

用法:

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


 3、迭代注意事项

迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)

迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException

迭代器的next方法返回值类型是Object,所以要记得类型转换。

4、set接口中常用的类

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

       唯一性原因:通过equals方法和hashcode方法来保证元素的唯一性。

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

       唯一性原因:通过compareTo或者compare方法中的来保证元素的唯一性。元素是以二叉树的形式存放的。

5、泛型的特点

  * 提高了程序的安全性

  * 将运行期遇到的问题转移到了编译期

  * 省去了类型强转的麻烦

l

 

泛型类的出现优化了程序设计

6、Map集合

Map集合常用类

Hashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。

l

HashMap:线程不安全,速度快,允许存放null 键,null值。

l

TreeMap:对键进行排序,排序原理与TreeSet 相同。

 

Mapcollcection区别:

* MapCollection在集合框架中属并列存在l

 

* Map存储的是键值对

l

* Map存储元素使用put方法,Collection使用add方法

l

* Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素

l

* Map集合中键要保证唯一性

 

二、Collection中的一些功能

Collection定义了集合框架的共性功能。

1,添加

add(e);

addAll(collection);

 

2,删除

remove(e);

removeAll(collection);

clear();

 

3,判断。

contains(e);

isEmpty();

 

4,获取

iterator();

size();

 

5,获取交集。

retainAll();

 

6,集合变数组。

toArray();

 

1,add方法的参数类型是Object。以便于接收任意类型对象。

 

2,集合中存储的都是对象的引用(地址)

 

什么是迭代器呢?(iterator被封装在对象内部)

其实就是集合的取出元素的方式。

如同抓娃娃游戏机中的夹子。

 

迭代器是取出方式,会直接访问集合中的元素。

所以将迭代器通过内部类的形式来进行描述。

通过容器的iterator()方法获取该内部类的对象。

三、代码如下

public class CollectionDemo {public static void main(String[] args) {//method_get();//method_2();base_method();}public static void sop(Object obj){System.out.println(obj);}public static void method_get(){ArrayList al=new ArrayList();//1、添加元素。al.add("java01");//add(Object obj);al.add("java02");al.add("java03");al.add("java04");/*Iterator it=al.iterator(); *这个方法访问的是这个接口的子对象,接口型应用只能指向接口的子对象,而这个对象               不是new出来的,而是通过集合的方法获取出来的。获取迭代器,用于取出集合中的元素。 while(it.hasNext())//haxnext()如果仍有元素可以迭代,则返回true{sop(it.next());}*/for(Iterator it=al.iterator();it.hasNext();){sop(it.next());}}public static void method_2(){ArrayList al1=new ArrayList();al1.add("java01");al1.add("java02");al1.add("java03");al1.add("java04");ArrayList al2=new ArrayList();al2.add("java03");al2.add("java04");al2.add("java05");al2.add("java06");sop("交集:"+al1.retainAll(al2));//取交集,al1.retainall(al2);返回的是boolean类型//al1.removeAll(al2);sop("a12:"+al2);//打印a12:[java03, java04, java05, java06]}public static void base_method(){//创建一个集合容器。使用Collection接口的子类。ArrayListArrayList al=new ArrayList();//1,添加元素。al.add("java01");//add(Object obj);al.add("java02");al.add("java03");al.add("java04");//打印原集合。sop("原集合:"+al);//3,删除元素。al.remove("java02");sop("删除后的"+al);//al.clear();//清空集合。//4,判断元素。sop("java03是否存在:"+al.contains("java03"));sop("集合是否为空?"+al.isEmpty());//2,获取个数。集合长度。sop("size:"+al.size());//打印改变后的集合。sop(al);}}
--------------------ASP.Net+Android+IOS开发java培训、期待与您交流! --------------------

0 0
原创粉丝点击