JAVA高阶学习

本文详细探讨了JAVA中的数据结构,包括枚举、位集合、向量、栈、字典和哈希表等,并介绍了集合框架的基础知识。此外,还涵盖了序列化、网络编程和多线程编程的概念,为JAVA程序员提供了深入的学习材料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据结构

在学习一门语言时,分析他的数据结构是必要工作。JAVA中的数据结构包括以下几种类和接口:

  • 枚举
  • 位集合
  • 向量
  • 字典
  • 哈希表
  • 属性
1、枚举,

不必多说,基础教程中讲过。

2、位集合

一个Bitset类创建一种特殊类型的数组来保存位置。通俗点讲,Bitset是用来记录位置索引的一种数组。BitSet中数组大小会随需要增加。他有两种构造方式,分别如下:

BitSet bits1 = BitSet();
BitSet bits2 = BitSet(int size);
3、向量

向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。
和数组一样,Vector对象的元素也能通过索引访问。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。

vector支持四种构造方法:

Vector();//创建一个默认的向量
Vector(int size);//创建指定大小的向量
Vector(int size,int incr);//创建指定大小的向量,并且增量用incr指定. 增量表示向量每次增加的元素数目
Vector(Collection c);//创建一个包含集合c元素的向量

使用如下所示:

Vector v = new Vector(3, 2);
System.out.println("Initial size: " + v.size());
System.out.println("Initial capacity: " + v.capacity());
v.addElement(new Integer(1));
v.addElement(new Double(2));
System.out.println("Capacity after four additions: " + v.capacity());
4、栈

他是一个后进先出的数据结构。示例如下:

Stack st = new Stack();
st.push(new Integer(a));//入栈
System.out.println("push(" + a + ")");
Integer a = (Integer) st.pop();//出栈
System.out.println(a);
5、字典

字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。
Dictionary类已经过时了。在实际开发中,你可以实现Map接口来获取键/值的存储功能。

Map使用如下所示:

Map m1 = new HashMap(); 
m1.put("Zara", "8");
6、哈希表(Hashtable)

它和HashMap类很相似,但是它支持同步。像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。

用法如下:

Hashtable balance = new Hashtable();
double bal;

balance.put("Zara", new Double(3434.34));  //添加键值对
bal = ((Double)balance.get("Zara")).doubleValue();   //通过键获取值
balance.put("Zara", new Double(bal+1000));
System.out.println("Zara's new balance: " + balance.get("Zara")); 
7、属性

Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。

Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。

用法如下:

import java.util.*;

public class PropDemo {

public static void main(String args[]) {
  Properties capitals = new Properties();
  Set states;
  String str;

  capitals.put("Illinois", "Springfield");
  capitals.put("Missouri", "Jefferson City");
  capitals.put("Washington", "Olympia");
  capitals.put("California", "Sacramento");
  capitals.put("Indiana", "Indianapolis");

  // Show all states and capitals in hashtable.
  states = capitals.keySet(); // get set-view of keys
  Iterator itr = states.iterator();
  while(itr.hasNext()) {
     str = (String) itr.next();
     System.out.println("The capital of " +
        str + " is " + capitals.getProperty(str) + ".");
  }
  System.out.println();

  // look for state not in list -- specify default
  str = capitals.getProperty("Florida", "Not Found");
      System.out.println("The capital of Florida is " + str + ".");
    }
}

二、集合框架

集合框架被设计成要满足以下几个目标。

  • 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
  • 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
  • 对一个集合的扩展和适应必须是简单的。

为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet等,除此之外你也可以通过这些接口实现自己的集合。

三、序列化

序列化说白了就是将对象表示成一个字节序列,该字节序列能够表示对象的数据、有关对象类型的信息和存储在对象中数据的类型。序列化一般都是将对象序列化成字节,然后存入文件中。反序列化就是从文件中读取字节,然后根据字节反序列化出该对象以及他包含的信息。

文件的存储与读过程就是一个很好的序列化与反序列化的例子。

四、网络编程

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。

java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。

java.net包中提供了两种常见的网络协议的支持:

  • TCP: TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称TCP/IP。
  • UDP:UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。

五、多线程编程

一个线程的完整周期如下所示:

  • 新建状态: 一个新产生的线程从新状态开始了它的生命周期。它保持这个状态直到程序start这个线程。
  • 运行状态:当一个新状态的线程被start以后,线程就变成可运行状态,一个线程在此状态下被认为是开始执行其任务。
  • 就绪状态:当一个线程等待另外一个线程执行一个任务的时候,该线程就进入就绪状态。当另一个线程给就绪状态的线程发送信号时,该线程才重新切换到运行状态。
  • 休眠状态: 由于一个线程的时间片用完了,该线程从运行状态进入休眠状态。当时间间隔到期或者等待的事件发生了,该状态的线程切换到运行状态。
  • 终止状态: 一个运行状态的线程完成任务或者其他终止条件发生,该线程就切换到终止状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值