浅析java集合框架
来源:互联网 发布:淘宝联盟红包很无耻 编辑:程序博客网 时间:2024/06/06 10:44
最近学习了java集合框架,感觉写代码要用的知识点比较冗杂。对各个接口实现的方法也不太熟悉,写代码不知从何下手。既然知识的细节和运用不是一时半会儿能够掌握,我们就要让迷糊的大脑清醒清醒。而梳理整个知识点的框架能够让我们找到流畅地写代码的丝丝感觉。我们先了解什么是java集合框架。
JAVA集合框架综述:
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。JAVA也如此。
集合是Java语言中非常重要的API,用来存储多个数据,实现了不同的数据结构。
Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。集合中只能保存对象(保存对象的引用变量)。(数组既可以保存基本类型的数据也可以保存对象)。
当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类型(参见具体泛型的内容)。
Java集合框架有三大接口,分别是Collection、Map、Iterator。这些接口又包含了一些接口或实现类。
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类
- java集合框架浅析
- java集合框架浅析
- 浅析java集合框架
- 浅析java集合框架
- 浅析java集合框架
- java集合框架浅析
- Java 集合框架浅析
- Thinking in Java之集合框架浅析
- 牛刀小试 - 浅析Java集合框架的使用
- Java 集合框架 源码浅析 与理解
- 深入java集合学习1-集合框架浅析
- 浅析java集合
- Java集合浅析
- java集合浅析
- JAVA集合浅析
- Java集合:集合框架
- 【Java】浅析SSH框架
- JAVA集合类Collection浅析
- ognl取值的代码
- ARM linux的启动部分源代码简略分析
- hive maven 编程
- 暴力,STL,哈希技术,Floyd判圈算法(计算器谜题,uva 11549)
- 欧拉工程第24题 0,1,2,3,4,5,6,7,8,9的第100万个字典排列是什么
- 浅析java集合框架
- ASP.NET中() => 代表什么
- HDU 3555 Bomb 详解(数位DP入门题)
- 宏实现大小端转换
- 13. Blade 模板引擎
- 1622-5 孔富晨 总结《2016年10月24日》 【连续第24天总结】
- CheckBox与文字的间距
- RecyclerView子View宽度不能全屏的问题
- Struts2框架整理(CRUD+运行流程)