Java集合框架(一)

Java集合框架结构图完整版

在完整版的结构图中Collection集合和Map下有许多未实现的抽象类(AbstractCollection、AbstractMap等等)。下面整理一个简化版的,去除了一些不常用的子类和中间的一些抽象类。

Java集合框架结构图简化版

说集合之前先来讲讲对象数组:

对象数组:

数组可以储存基本类型和引用类型,储存引用类型的数组叫对象数组(案例:用数组储存10个Animal类对象)

集合(Collection):

a)集合的由来:

Java语言是面对对象语言,需要操作众多的对象,所以我们需要一种容器(如:数组和StringBuilder)来储存这些的对象,而数组长度是不可变的,在实际操作中,适应不了多变的需求,所有Java就提供了集合供我们使用。

b)集合与数组的区别:

1.长度区别:数组长度固定;集合长度可变。

2.内容区别:数组可以是基本类型,也可以是引用类型;集合只可以是引用类型。

3.元素:数组只可以是一种元素;集合可以是多种元素。

c)集合的架构:如上图结构;

d)集合的主要功能:

1.增加功能;

2.删除功能;

3.判断功能;

4.获取功能;

5.长度功能;(注意:长度是size,不是length)

6.集合转数组

e)集合的遍历:

1.迭代器Iterator;

2.增强for;

下面先从Collection开刀:

概述:

Collection是单列集合的顶层接口,子接口有List和Set两个继承体系。

使用:

A)创建集合对象

Collection c = new ArrayList();

B)创建元素对象

Student[] s = new Student();

C)把元素对象添加到集合中

c.add(s[0]);

D)遍历:

1.创建迭代器   Iterator it = c.iterator();

2.向下转型       Student s = (Student)c.next

功能(源码方便自己回忆 = 。=):


 1 public class CollectionDemo {
 2
 3 public static void main(String[] args) {
 4
 5 //创建对象
 6
 7 Collection c = new ArrayList();
 8
 9 //添加功能
10
11 c.add("wo");
12
13 c.add("ai");
14
15 c.add("ni");
16
17 System.out.println(c);
18
19 //删减功能
20
21 //c.clear();
22
23 System.out.println("remove:"+c.remove("wo"));
24
25 System.out.println(c);
26
27 //判断功能
28
29 System.out.println("contains:"+c.contains("ai"));
30
31 System.out.println("isEmpty:"+c.isEmpty());
32
33 //长度
34
35 System.out.println("size:" + c.size());
36
37 }
38
39 }
40
41 遍历:
42
43 (A).Iterator是Collection集合专有的迭代器
44
45 Iterator it = c.iterator();//创建迭代器对象
46
47 while (it.hasNext()) {//判断是否有下一个元素
48
49 Student s1 = (Student) it.next();//向下转型
50
51 System.out.println(s1.getName() + "---" + s1.getAge());
52
53 }
54
55 (B).用增强for遍历Collection
56
57 for(String s : c) {//格式:类型  变量名 :遍历对象
58
59 System.out.println(s);
60
61 }

Collection子接口之List:

概述:

List是Collection集合的子接口,所以使用与Collection一样,特点是有序,可重复。

List的子类特点:

A)ArrayList

底层结构是数组,查询快,增删慢

线程不安全,效率高

B)Vector(上面结构框架中标住遗留,由于性能比ArrayList低,所以逐渐被代替了)

底线结构是数组,查询快,增删慢

线程安全,效率低

C)LinkedList

底层结构是链表,查询慢,增删快

线程不安全,效率高

特有功能:

因为List是Collection的子接口,所以上面的Collection中所有功能都有,且用法一样。

A)指定添加:add(int index,elem e) 在指定位置加入元素

B)指定获取: get(int index) 获取指定位置元素

C)指定删除:Object remove(int index) 删除指定位置元素,返回被删元素

E)指定修改:Object set(int index) 修改指定位置元素,返回被修改元素

可见List相比Collection最大特点就是可以指定操作,这正是List的有序特性

老规矩源码方便回忆 = 。=


 1 public class Teyou {
 2
 3 public static void main(String[] args) {
 4
 5 // 创建对象
 6
 7 List list = new ArrayList();
 8
 9 String[] s = new String[3];
10
11 s[0] = "aaa";
12
13 s[1] = "bbb";
14
15 s[2] = "ccc";
16
17 // 添加功能:
18
19 // add(int index,elem e) 在指定位置加入元素
20
21 list.add(s[0]);
22
23 list.add(s[1]);
24
25 list.add(s[2]);
26
27 list.add(1, s[2]);
28
29 System.out.println(list);
30
31 System.out.println("---------------------------");
32
33 // 获取功能
34
35 // get(int index) 获取指定位置元素
36
37 System.out.println(list.get(1));
38
39 System.out.println("---------------------------");
40
41 // 删除功能
42
43 // Object remove(int index) 删除指定位置元素,返回被删元素
44
45 System.out.println(list.remove(3));
46
47 System.out.println("list:" + list);
48
49 System.out.println("---------------------------");
50
51 // 修改功能
52
53 // Object set(int index) 修改指定位置元素,返回被修改元素
54
55 System.out.println(list.set(1, "wo ai ni"));
56
57 System.out.println("list:" + list);
58
59 }
60
61 }

遍历:ListIterator是List的一个特有的迭代器。

该迭代器继承了iterator迭代器,所以有next()和hasNext()方法,还有它特有的previous()逆向遍历,但必须要正向后才能逆向。


List子接口之ArrayList:

概述:

ArrayList在上面的结构框架中我用了红色字体,它是非常常用的集合,所以要重点掌握。ArrayLIst是List的一个子类,实现类。

ArrayList:

关于ArrayList,其实上面都已经讲了,把Collection和List的所有操作合并就是ArrayLsit的功能了。

List子接口之LinkedList:

概述:

LinkedList的底层是链表结构,所以它可以在表头和表尾处添加元素。操作与链表的操作差不多。

LinkedList特有功能:

A)添加功能

public void addFirst(Object obj)//在表头添加元素

public void addLast(Object obj)//在表尾添加元素

B)获取功能

public Object getFirst()//获取表头元素

public Object getLast()//获取表尾元素

C)删除功能

public Object removeFirst()//删除表头元素

public Object removeLast()//删除表尾元素



Collection子接口之Set:

概论:

Set和List一样属于Collection集合的子接口,Set的特点是无序的(储存顺序与获取顺序不一定一致),唯一的。Set的实现子类有HashMap、TreeSet、LinkedHashSet,在下面逐个展示。

Set的子类特点:

A)HashMap

底层数据结构是哈希表。

保证元素唯一性的依赖两个方法:

hashCode()和equals()开发中自动生成这两个方法即可

B)TreeSet

特点是有序和唯一,底层数据结构是红黑树(一种自平衡二叉树,具体我也不太懂,不过挺重要的=。=)

保证元素排序依赖:

自然排序

比较器排序(优先)

保证元素唯一性依赖:

根据比较的返回值是否是0来决定

C)LinkedHashSet

哈希表一个子类,类似于HashMap(后面再说),但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。

Set功能:

既然Set是Collection的一个子接口,所以上面的Collection所有功能都有。Set的特点是元素是唯一的,它的唯一性是依赖元素对象重写的equals()方法实现的。

这里先不详讲,下面通过它的子类来了解它。

Set子接口之HashSet:

特有功能范例:


 1 Sets = new HashSet();//创建HashSet对象
 2
 3 s.add(new Student("java",30));
 4
 5 s.add(new Student("c#",10));
 6
 7 s.add(new Student("php",20));
 8
 9 s.add(new Student("php",20));//相同元素不能被加入集合中
10
11 for(Student s1 : s) {
12
13 System.out.println(s1.getName() + "---" + s1.getAge());}

Set子接口之TreeSet:

下面展示一个范例,按照姓名的长度将Set中集合进行排序,其中比较器Comparator用匿名内部类写:


 1 public static void main(String[] args) {
 2
 3 //方法一自定义比较器类排序
 4
 5 // 创建集合对象
 6
 7 // TreeSetts = new TreeSet();
 8
 9 // public TreeSet(Comparator comparator)
10
11 // TreeSetts = new TreeSet(new MyComparator());//MyComparator类自己第一
12
13 //方法二匿名内部类
14
15 TreeSetts = new TreeSet(new Comparator() {
16
17 @Override下面是匿名内部类内容
18
19 public int compare(Student s1, Student s2) {
20
21 // 姓名长度
22
23 int num = s1.getName().length() - s2.getName().length();
24
25 // 姓名内容
26
27 int num2 = num == 0 ? s1.getName().compareTo(s2.getName())
28
29 : num;
30
31 // 年龄
32
33 int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
34
35 return num3;
36
37 }
38
39 });
40
41 // 创建元素
42
43 Student s6 = new Student("wuqilong", 10);
44
45 Student s2 = new Student("zhangguorong", 29);
46
47 Student s3 = new Student("wanglihong", 23);
48
49 Student s1 = new Student("linqingxia", 27);
50
51 Student s4 = new Student("linqingxia", 27);
52
53 Student s5 = new Student("liushishi", 22);
54
55 Student s8 = new Student("linqingxia", 29);
56
57 Student s7 = new Student("fengqingy", 22);
58
59 // 添加元素
60
61 ts.add(s1);
62
63 ts.add(s8);
64
65 ts.add(s3);
66
67 ts.add(s2);
68
69 ts.add(s5);
70
71 ts.add(s4);
72
73 ts.add(s7);
74
75 ts.add(s6);
76
77 // 遍历
78
79 for (Student s : ts) {
80
81 System.out.println(s.getName() + "---" + s.getAge());
82
83 }
84
85 }


Collection集合体系就先这样了,Map集合的后面再奋斗了【捂脸】

时间: 2024-08-01 19:24:08

Java集合框架(一)的相关文章

Java—集合框架List

集合的概念 现实生活中:很多的事物凑在一起 数学中的集合:具有共同属性的事物的总和 Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象 集合的作用 在类的内部,对数据进行组织(针对作用与意义一样的属性,将他们放到一个集合中) 简单而快速的搜索大数量的条目 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中快速的插入或删除有关元素 有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型 与数组相比 数组的长度

《深入理解Java集合框架》系列文章

Introduction 关于C++标准模板库(Standard Template Library, STL)的书籍和资料有很多,关于Java集合框架(Java Collections Framework, JCF)的资料却很少,甚至很难找到一本专门介绍它的书籍,这给Java学习者们带来不小的麻烦.我深深的不解其中的原因.虽然JCF设计参考了STL,但其定位不是Java版的STL,而是要实现一个精简紧凑的容器框架,对STL的介绍自然不能替代对JCF的介绍. 本系列文章主要从数据结构和算法层面分析

JAVA集合框架

收藏 查看我的收藏 146有用+1 56 编辑 Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台.动态的Web.Internet计算.从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet.集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.任何集合框架都包含三大块内容:对外的接口.接口的实

我所理解Java集合框架的部分的使用(Collection和Map)

所谓集合,就是和数组类似--一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接口,长虚线表示抽象类,实线表示类,箭头表示实现接口或者继承)(在网络上找的图,不知道原作者,侵权请联系我删除)(总之,关系很复杂,所以不用记得这个图,只是用来吓吓人而已的). 下面贴上个人理解之精简版之Collection(集)和Map(地图?暂且这么理解吧),话说思维导图蛮好用,以下是两幅思维导图

【Java集合源码剖析】Java集合框架

Java集合工具包位于package java.util下.包含了一些常用的数据结构,如数组.链表(单/双向).树.栈.队列.哈希表等. Java集合框架大致可分为五部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections). Java集合类的整体框架如下: 如图,Java集合类大致分为两大类:Collection和Map. Collection主要包括两部分:List和Set. List接口通常表示一个列表(数

Java集合框架总结(3)——TreeSet类的排序问题

Java集合框架总结(3)--TreeSet类的排序问题 TreeSet支持两种排序方法:自然排序和定制排序.TreeSet默认采用自然排序. 1.自然排序 TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序.(比较的前提:两个对象的类型相同). java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该

2016.3.9-3.10(java集合框架)

3.9 集合框架有什么作用? 集合框架其主要功能是用来将存储的数据以某种结构组织,并以特定的方式来访问这些数据. Java集合框架中有哪些存储方式? Java集合框架中的对象容器,按照对象在其中的存储方式,分为Set.List.和Map三种类型. Set类型对象没有顺序,且不能重复: List类型对象容器中的对象按照索引顺序排序,而且可以有重复的对象: Map类型对象容器中的元素包含一对“键对象-值对象”映射,其中键对象不能重复,值对象可以重复. 以上三种存储方式对应Java集合框架中Set.L

java集合框架22

思想:在面向对象的思想里,一种数据结构被认为是一种容器.在本质上来讲是一个类,提供方法支持查找,插入和删除等等操作. Java集合框架支持以下俩种类型的容器: 存储一个元素集合,简称为集合Collection 存储键值对,称为图Map 集合collection 三种主要类型 : 规则集(set) , 线型表(List) , 队列(Queue) set: 存储一组不重复的数据 List: 存储由元素构成的有序集合 Queue: 存储先进先出方式处理的对象 细说Collection接口: 它是处理对

Java集合框架的知识总结

说明:面试准备,写的挺不错的. 转载地址: http://www.cnblogs.com/zhxxcq/archive/2012/03/11/2389611.html 1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). 当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理.从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类

Java集合框架之泛型

广州疯狂软件教育Java培训,iOS培训分享 泛型:1.5版本以后出现的新特性.用于解决安全问题,是一个安全机制. 好处: 1.将运行时期出现问题ClassCaseException,转移到了编译时期. 2.方便与程序员解决问题.让运行时事情减少,安全. 3.避免了强制类型转换 泛型格式:通过<>来定义要操作的引用数据类型 什么时候写泛型: 在集合框架中和常见 只要见到<>就要定义泛型 import java.util.Comparator; import java.util.It