浅析java集合框架

来源:互联网 发布:淘宝联盟红包很无耻 编辑:程序博客网 时间:2024/06/06 10:44

最近学习了java集合框架,感觉写代码要用的知识点比较冗杂。对各个接口实现的方法也不太熟悉,写代码不知从何下手。既然知识的细节和运用不是一时半会儿能够掌握,我们就要让迷糊的大脑清醒清醒。而梳理整个知识点的框架能够让我们找到流畅地写代码的丝丝感觉。我们先了解什么是java集合框架。

JAVA集合框架综述:

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口接口的实现对集合运算的算法。JAVA也如此。

集合是Java语言中非常重要的API,用来存储多个数据,实现了不同的数据结构。

Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。集合中只能保存对象(保存对象的引用变量)。(数组既可以保存基本类型的数据也可以保存对象)。

当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类型(参见具体泛型的内容)。

Java集合框架有三大接口,分别是Collection、Map、Iterator。这些接口又包含了一些接口或实现类。

##### JAVA集合框架综述:

Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列实现,类似于List。

Map实现类用于保存具有映射关系的数据(key-value)。

Iterator主要用于遍历(即迭代访问)Collection集合中的元素,也称为迭代器。

Set、List和Map可以看做三大重要集合。

List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。

Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。

Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。

对于Set、List和Map三种集合,最常用的实现类分别是HashSet、ArrayList和HashMap三个实现类。

一、Collection接口

Collection意即集合,是所有集合类的根接口,同时Collection接口是一个泛型接口。

Collection接口是List、Set和Queue接口的父接口,同时可以操作这三个接口。

List接口:有序的集合,元素有序存入。

Set接口: 无重复的集合,即存入的元素不重复。

Queue接口:队列,jdk1.5版本新增接口,Queue实现了“先进先出”(FIFO)的存储结构。Queue是Collection的子接口,具有所有集合基本操作,除此之外,Queue还提供了一些新的插入、提取、查询等方法。

(1)List接口

继承了Collection接口,并且扩展出属于自己的方法。

List集合中的元素都是与索引有关系的,因此List 集合扩展的方法都是与索引有关系的。

例如: add(int index,E)……添加元素在所对应的索引位置 。

List 是个接口,有三个实现的类:

1、ArrayList类(数组列表,数据采用数组方式存储。)

2、LinkedList类(链表)

3、Vector类(jdk1.0中的集合,实现了同步)

Collection c = new ArrayList();//添加元素 c.add(""); //虽然集合里不能放基本类型的值,但Java支持自动装箱c.add(6);//删除指定元素c.remove(6);//判断是否包含指定字符串c.contains("");。。。。等等方法

(2)Set接口

Set接口继承了Collection接口。Set中所存储的元素是不重复的,但是是无序的。也就是说,Set中的元素是没有索引的。

Set接口有两个实现类:

1、HashSet类(底层是哈希码值,基于HashMap实现的。)

Set userSet1=new TreeSet();

2、TreeSet类 (元素不重复,并且元素实现了排序。)

实例化:Set userSet1=new TreeSet();

(3)Queue接口

队列:一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

Queue接口有一个LinkedList类(链表)。

实例化:Queue q = new LinkedList<>();

优点:它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常

常用方法:offer()来加入元素;poll()来获取并移出元素;element()获取但是不移除此队列的头;peek()获取但不移除此队列的头;如果此队列为空,则返回 null。

二、Map接口

Map中保存的是键值对Map<key,value>,Key值不允许重复。

实例化:Map<String,Country> ku = new HashMap<>();

常用方法:

put(K key,V value)

该方法可以将key 和value存到Map对象

get(Object key)

该方法可以根据key值返回对应的value。

size()

返回Map对象中键值对的数量。

Map接口有两个实现类:

1、HashMap类

较常用的Map集合类,key值的hashCode和equals保证元素唯一性。HashMap通过hashcode对其内容进行快速查找, HashMap中元素的排列顺序是不固定的。

HashMap的常用方法:

put<key,value> 存放对象

get(key) 获取key所对应的数据。

keySet() 返回此映射中所包含的键的 set 视图。

2、TreeMap类

不仅可以保证key不重复,还可以对value数据进行排序。TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序的Map就应该使用TreeMap.

三、Iterator接口

Iterator接口提供了迭代集合对象的功能,是一个泛型接口.

常用方法:

hasNext();此方法用来判断被迭代的集合中是否存在元素。

next();返回集合中的当前元素.

迭代器访问Collection集合

Collection对象都有返回Iterator的方法,因此都可以用迭代器来进行遍历。

—List集合

public static void main(String[] args) {//创建用户对象User user1=new User("张三");User user2=new User("李四"); //创建集合对象,存放用户对象List<User> userList=new ArrayList<User>();//List<User> userList=new LinkedList<User>();userList.add(user1);userList.add(user2);Iterator<User> userIter=userList.iterator();while(userIter.hasNext()){User userInfo=userIter.next();}}

Set集合(TreeSet中存储的对象必须实现Comparable接口)

public static void main(String[] args) {User user1=new User("qw");    User user2=new User("er");User user3=new User("rw");Set<User> userSet1=new HashSet<User>();//Set<User> userSet1=new TreeSet<User>();userSet1.add(user3);userSet1.add(user1);userSet1.add(user2);Iterator<User> it= userSet1.iterator();    while(it.hasNext()){System.out.println(it.next().getUserName());        } }

Map集合

Map集合是以键值对存放的,Map接口中提供了将key与value分别转变成Collection对象的方法,然后就可以使用Iterator分别遍历Map的key以及value。

public static void main(String[] args) {UserInfo user1=new UserInfo();user1.setName("王华");user1.setAge(12);UserInfo user2=new UserInfo();user2.setName("小华");  user2.setAge(8);UserInfo user3=new UserInfo();user3.setName("张华");user3.setAge(12);Set<UserInfo> userSet=new TreeSet<UserInfo>();//Set<UserInfo> userSet=new HashSet<UserInfo>();userSet.add(user);userSet.add(user1);userSet.add(user2);Iterator<UserInfo> it=userSet1.iterator();while(it.hasNext()){UserInfo info=it.next();System.out.println(info.getName()+info.getAge());}}TreeMap中想要存放有序的对象,Key类需要继承Comparable类
0 0