[零基础学JAVA]Java SE应用部分-35.JAVA类集之四

简介:
JAVA按以下重要顺序 
· 面向对象 
· 类集框架 
· JDBC 
· 文件编程
本季目标
主要讲解以下的内容: 
· Collection 
· List 
· Set 
· Map 
· Iterator 
· ListIteator 
· Enumeration 
· for…each语句(JDK 1.5的新特性) 
· Comparable接口 
· 二叉树
1、类集结构
(1)类集的产生目的
类集简单来讲就是一个动态的对象数组,此对象数组可以改变大小,可以任意的实现对象的增加、删除、输出。所有的类集存放java.util包中。
(2)类集的划分 
1、存放单值:Collection 
2、存放一对值:Map 
3、输出:Iterator
(3)类集的具体概念 
<1>Collection(只能存放一个值) 
|- 主要功能:用于输出使用 
|- 子接口:List(允许有重复的元素,而且加入的顺序就是输出的顺序) 
    |- 子类:ArrayList,是在Java 2之后推出的,是新的类,是使用异步处理方式,其性能较高 
    |- 子类:Vector,是在JDK 1.0的时候就推出,因为是旧的类,有很多List所没有的功能,是使用同步处理方式,其线程安全性较高,会比较慢。使用Vector除了可以使用Iterator输出之外,也可以使用Enumeration进行输出。两者是通用的。Vector子类允许直接使用 addElement(Object obj),也是可以向集合中加入元素的。 
    |- 自己新增的方法: 
        |- 取每一个对象: public Object get(int ind) ; 
    |- 子类:Stack(栈) 
|- 子接口:Set(不允许有重复元素,重复元素会替换)?如何可以区分重复元素呢?  
    |- 子类:HashSet:是无序列存放 
    |- 子类:TreeSet:有序存放,是通过Comparable接口完成的 
|- 常用方法: 
    |- 增加一个对象: public boolean add(Object obj) 
    |- 取得类集的长度: public int size() ; 
    |- 判断集合中的内容是否为空: public boolean isEmpty() 
    |- 删除一个对象: public boolean remove(Object obj) :就必须牵扯到对象的比较状态。 
    |- 实例化Iterator对象: public Iterator iterator() ; 
<2>JDK 1.5提供了一个方便的输出操作:for…each语句。 
<3>Iterator接口输出是最常见的
 
|- 常用方法 
    |-  public boolean hasNext():判断是否有下一个元素 
    |-  public Object next():取出下一个元素 
|- 子接口:ListIterator,可以进行双向输出,只对于List接口有用 
    |- 常用方法:具备了Iterator接口中的全部内容 
        |-  public boolean hasPrevious() 
        |-  public Object previous()  
<4>Enumeration(在1.5之后也加入、泛型支持哈~) 
|- 常用方法: 
    |- 判断是否有下一个元素: public boolean hasMoreElements() 
    |- 取出元素: public Object element() 
5、 Map(存放一对值) 
|- 功能:与Collection的功能不一样,Map的主要功能是用于查找使用的。 
|- 注意点: 
    |- 使用Map操作时,不能直接使用Iterator进行输出。 
    |- 而且里面不能有重复key。 
    |- 如果非要使用Iterator进行输出,则必须按以下的步骤进行操作: 
|- Map --> Set --> Iterator --> Map.Entry --> key与value的分离 
|- 常用子类: 
    |- HashMap:无序存放,是新的类,是JDK 1.2时推出的,是异步处理,性能较高 
    |- Hashtable:是旧的类,是JDK 1.0时推出的,是线程安全的,性能较低 
        |- Properties(重点):属性文件操作类 
    |- TreeMap:有序存放 
|- 常用方法: 
    |- 向集合中保存数据: public Object put(Object key,Object value):返回的是value 
    |- 从集合中查找数据: public Object get(Object key):根据key查找。 
    |- 将Map数据变为Set实例: Set<Map.Entry<K,V>> entrySet() 
    |- 将全部的key变为set实例: Set<K> keySet() 
    |- 将全部的vlaue变为Collection接口实例: Collection<V> values() 
|- Map.Entry:保存key与value 
    |-  public Object getKey() 
    |-  public Object getValue() 
|- 存放key的注意点:
################Michael分割线####################
2、代码讲解
(11)HashMap
Map的基本应用
image 
如果查到了,则返回具体的值,如果没有查到,则返回null
image
使用Iterator输出Map接口中的内容
image
HashSet:是无序列存放滴~~~
image
将全部的key进行输出
image
image
输出全部的值
  image
image
(12)Hashtable
image
image
(13)TreeMap
按key进行排序,本操作中依然使用了Comparable接口。
image
TreeSet:有序存放,是通过Comparable接口完成的
image
(14)Stack
入栈:public Object push(Object obj) 
出栈:public Object pop()
 
注意点:如果此时栈中已经没有内容了,则会出现异常。
image
image
(15)Properties(重点 
· 属性操作类,所有的key 与value 都按属性设置,都是字符串。而且此属性文件可以直接保存在文件中,或从文件中读取出来。 
设置属性: public Object setProperties(String key,String value) 
取得属性: 
|-  public String getProperty(String key)  根据key读取属性,返回值 
|-  public String getProperty(String key,String def) :如果没有读到值,则返回def指定的内容。 
保存在文件中: 
|- 保存成普通文件: public void store(OutputStream out,String comments) throws IOException 
|- 保存成XMl文件: public void storeToXML(OutputStream out,String comments) throws IOException 
从文件中读取属性: 
|- 从普通文件中读取:public void load(InputStream input) throws IOException 
|- 从XML文件中读取: public void loadFromXML(InputStream input) throws IOException
image
image
将内容保存成普通文件:
image
image
将内容保存为XML文件:
image
image
从XML文件中把属性读取出来
  image
image
(16)Map重要补充
  image
image
以上的程序可以通过key找到value。 
现在把代码反过来
image
image
代码反过来之后,发现没有得到真正想要的内容,而是返回了null。
image
image 
此时如果要通过匿名对象来当作key,找到属性的话,就必须牵扯到Object中的几个方法: 
· 对象比较: 
· 通过hashCode;
  image
image
Java中是通过equals和hashCode方法去确认对象唯一性,可以进行比较。 
但是以上的程序需要一点更改,因为不能让所有对象的hashCode方法的返回值都是一样的,所以可以经过一些自己简单的运算。
image
image
一个完整的类最好覆写Object类中的三个方法: 
· hashCode 
· equals 
· toString
(17)额外补充(对象克隆)
就是把对象的内容重新复制一份,复制出一个新的对象 
protected Object clone() throws CloneNotSupportedException
克隆方法是一个受保护的方法。所以在其需要对象被克隆的子类中必须扩大权限,否则外部无法看见。 
对象所在的类必须实现Cloneable接口
Java程序中常用的有两大标识接口: 
· 可序列化:Serializable 
· 可克隆:Cloneable
  image
image
总结
就是向里面不断加入元素,可以动态的扩充,而且可以有存放单值的,也可以有存放一对值的。 
而且在集合中对于排序,使用的是Comparable接口。 
实例的模型很重要 —— Hibernate、EJB 3.0。
######################Michael分割线#############################







本文转自redking51CTO博客,原文链接:http://blog.51cto.com/redking/139803 ,如需转载请自行联系原作者
相关文章
|
2月前
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
83 7
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
171 57
|
26天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
27天前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
62 2
|
2月前
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
233 6
|
1月前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
45 2
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
75 8
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
80 2
|
2月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
14天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
67 17