浅析java集合框架


最近学习了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类
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值