Java语言入门(十)——容器
发布日期:2022-02-28 07:22:49 浏览次数:38 分类:技术文章

本文共 3870 字,大约阅读时间需要 12 分钟。

Java语言入门

介绍

1 早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护。但是:

(1)数组的长度难以扩充;
(2)数组中的数据类型必须相同。
2 Java容器是JavaAPI所提供的一系列类的实例,用于在程序中存放对象,主要位于java.util包中,其长度不受限制,类型不受限制,在存放String类的同时依然能够存放Integer类。
3 在Java中,如果有一个类 专门用来存放其他类的对象,这个类就叫做容器。

容器与数组的区别和联系:

1 容器不是数组,不能通过下标的方式访问容器中的元素;

2 数组的所有功能通过ArrayList容器都可以实现,只是实现的方式不同;
3 容器可以通过toArray()方法,转为数组。

容器的简单分类

1 从容器类图可知,数据容器主要分为两类:

(1)Collection:存放独立元素的序列。
(2)Map:存放key-value型的序列。
2 Collection是对Iterator接口的拓展。因此所有的Collection对象都可以使用对象名.iterator()的方法获取其迭代器iterator对象。
3 Map中提供了产生Collection的方法,可以方便地对键值对的值域进行操作。

Collection接口

1 boolean add(Object o)

2 Iterator iterator() Object[] toArray()
3 Object remove(int index)
4 boolean contains(Object o)
5 boolean isEmpty()
6 int size()
7 void clear()

List接口

1 java.util.List接口:描述列表结构,为Collection子接口。区分元素的顺序,可以有重复的元素。

2 void add(int index,Object element)
3 Object get (int index)
4 Object set(int index,Object element)
5 int indexOf (object o)

Set接口

1 java.util.Set接口:描述集合结构,为Collection子接口。模仿了数学概念上的set,要求不包含重复元素(最多有一个null元素)。

2 并不保证迭代顺序(除了TreeSet)。
3 由于Set操作与底层的实现关联性很强,Set中实现的方法有限。

Map接口

1 java.util.Map接口:描述了映射结构,Map结构允许以键集,值集合或键-值映射关系集的形式查看某个映射的内容。

2 Object put (Object key, Object value)
3 Object get(Object key)
4 boolean isEmpty()
5 Collection< V > values()
6 Set< K > keyset()

ArrayList类

1 Java.util.ArrayList类实现了List接口,允许元素取值为null。除实现了List接口定义的所有功能外,还提供了一些方法来操作列表容量的大小。

2 ArrayList()
3 ArrayList(int initialCapacity)
4 void trimToSize()
5 Object clone()
6 举例:TestArrayList.java

Vector类

1 Java.util.Vector也实现了List接口,其描述的也是可变长度的对象数组。

2 与ArrayList的差别:Vector是同步(线程安全)的,运行效率要低一些,主要用在多线程环境中,而ArrayList是不同步的,适合在单线程环境中使用。
3 void addElement(Object obj)
4 Object elementAt(int index)
5 void setElementAt(Object obj,int index)
6 举例:TestVector.java

Stack类

1 Java.util.Stack类继承了Vector类,对应数据结构中以“后进先出”方式存储和操作数据的对象栈

2 方法:
(1)Stack()
(2)Object push(Object item)
(3)Object pop()
(4)Object peek()
3 举例:TestStack.java

Iterator接口

1 Java.util.Iterator接口描述的是以统一方式对各种集合元素进行遍历/迭代的工具,也称迭代器。

2 boolean hasNext()
3 Object next()
4 void remove()
5 举例:
(1)TestIterator.java
(2)TestIterator2.java

HashSet

1 java.util.HashSet类实现了java.util.Set接口,描述典型的Set集合结构。

2 不允许出现重复元素,不保证集合中元素的顺序,最多只能有一个null元素。
3 boolean add(Object o)
4 boolean remove(Object o)
5 boolean contains(Object o)
6 举例:TestHashSet.java

TreeSet

1 Java.util.TreeSet类也实现了java.util.Set,它描述的是Set的一种变体—可以实现排序功能的集合。

2 使用元素的自然顺序对元素进行排序,或者根据创建set时的Comparator进行排序,具体根据取决于使用的构造方法。
3 Comparator<? super Object>comparator()
4 举例:TestTreeSet.java

Comparable接口

1 java.lang.Comparable接口中定义的compareTo()方法用于提供对其实现类的对象进行整体排序所需的比较逻辑。

2 实现类基于compareTo()方法的排序被称为自然排序。用户在重写compareTo()方法以定制比较逻辑时,需要确保其与等价性判断方法equals()保持一致。
3 凡是需要进行比较排序的都应该实现compareTo()方法;凡是把类对象放到以树为内部结构的容器中都应该实现compareTo()方法。

HashMap

1 Java.util.HashMap类实现了java.util.Map接口,该类基于哈希表实现了前述的映射集合结构。

2 HashMap结构不保证其中元素(映射信息)的先后顺序,并且允许使用null“值”和null“键”。
3 当集合中不存在当前检索的“键”所对应的映射值时,HashMap的get()方法会返回空值null,而不会允许出错。影响HashMap性能的两个参数:初始容量,加载因子
4 举例:TestHashMap.java

HashTable

1 Java.util.Hashtable也实现了Map接口。

2 Hashtable与HashMap的差别:
(1)Hashtable中元素的键和值均不允许为null,而HashMap则允许。
(2)Hashtable是同步的,即线程安全,效率相对要低一些,适合在多线程环境下使用;而HashMap是不同步的,效率相对高一些,提倡在单线程环境中使用。
3 举例:TestHashTable.java

Enumeration接口

1 Java.util.Enumeration接口的功能与Iterator接口是重复的,但只提供了遍历Vector和Hashtable(及子类Properties)类型集合元素的功能,且不支持集合元素的移除操作。

2 新的实现应该优先考虑使用Iterator接口而不是Enumeration接口。

Collections类

1 Java.util.Collections类中定义了多种集合操作方法,实现了对集合元素的排序、取极值、批量拷贝、集合结构转换、循环移位以及匹配性检查等功能。

2 static void cory(List dest,List src)
3 static void sort(List list)
4 static void reverse(List list)
5 static void shuffle(List list)
6 举例:TestCollections.java

Arrays类

1 java.util.Arrays类定义了多种数组操作方法,实现了对数组元素的排序、填充、转换为列表或字符串形式、增强的检索和深度比较等功能。

2 static List asList(Object… a)
3 static void sort(<类型>[] a)
4 static int binarySearch(<类型>[] a,int key)
5 static String totString(<类型>[] a)
6 举例:TestArrays.java

容器的使用

1 生成容器(可以有初始大小 ArrayList(int initialCapacity) 构造一个具有指定初始容量的空列表。)

2 从jdk中找到需要实现的方法,以实现增删改查

转载地址:https://blog.csdn.net/weixin_45854582/article/details/106225414 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java语言入门(六)——面向对象(三)
下一篇:Java语言入门(九)——线程类及多线程

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月19日 17时34分42秒