当前位置:   article > 正文

Java 高级教程_java高级教程

java高级教程

1. 数据结构

Java2中引入了一种新的框架-集合框架(Collection)

2. 集合框架

(1) 集合接口

a. 用得最多的是list接口和set接口。

b. List 接口存储的是有序的,可以重复的元素。

Set 接口存储的是无序的,不重复的数据。

c. List接口检索效率高,插入和删除效率低。

Set接口检索效率低,插入和删除效率高。

d. Map.Entry:  描述Map中的一个元素(键/值对)。

(2) 集合实现类

a. ArrayList: 实现了List的接口, 随机访问和遍历元素时效率高,插入删除效率低。多线程不安全。

b. TreeSet: 实现了Set接口,随机访问和遍历元素时效率低,插入删除效率高。多线程不安全。可以实现排序等功能。

c. HashMap: 实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度。多线程不安全。

d. 此外常用的还有Vector,ConcurrentHashMap

(3) 线程安全与不安全

a. Vector,HashTable,ConcurrentHashMap 是线程安全的。

b. ArrayList,LinkedList,HashMap,TreeMap,HashSet,TreeSet都不是线程安全的。

(4) 使用迭代器

a. 遍历 ArrayList

方法1: For-Each 遍历 List

for (String str : list) { 
        System.out.println(str);
     }

方法2: 链表变为数组进行遍历

list.toArray(strArray);
     for(int i=0;i<strArray.length;i++) 
     {
        System.out.println(strArray[i]);
     }

b. 遍历 Map 

方法1: 普遍使用,二次取值

for (String key : map.keySet()) {
       System.out.println("key= "+ key + " and value= " + map.get(key));
      }

方法2: 通过Map.entrySet遍历key和value, 推荐,尤其是容量大时

for (Map.Entry<String, String> entry : map.entrySet()) {
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }

(5) 其他

a. 集合框架的类和接口均在java.util包中。

b. 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。

3. ArrayList具体用法

(1) 创建数组队列: ArrayList<String> sites = new ArrayList<String>();

(2) 添加元素:sites.add("Google");

(3) 访问元素:sites.get(1);  // 访问第二个元素

(4) 修改元素:sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值

(5) 删除元素:sites.remove(3); // 删除第四个元素

(6) 计算大小:使用size() 方法

(7) 排序:使用 sort()方法

(7) ArrayList 中的元素实际上是对象, 所以基本类型要换成包装类

intInteger
longLong
floatFloat
charCharacter

4. LinkedList 具体用法

(1) LinkedList 是一个链表,增加和删除效率更高,查找和修改效率较低。

(2) 需要频繁的在开头、中间、末尾添加和删除元素的话使用LinkedList,否则使用ArrayList

(3) 创建数组队列: LinkedList<String> sites = new LinkedList<String>();

(4) 添加元素:sites.addFirst("Wiki");  sites.addLast("Google"); 

(5) 访问元素:sites.getFirst(); sites.getLast(); sites.get(1); 

(6) 修改元素:sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值

(7) 删除元素:sites.removeFirst(); sites.removeLast();

5. HashMap 具体用法

(1) HashMap 对象: HashMap<Integer, String> Sites = new HashMap<Integer, String>();

(2) 添加和修改元素: Sites.put(1, "Google");

(3) 访问元素:Sites.get(1)

(4) 删除元素:Sites.remove(1);

(5) 迭代 HashMap:

a. 输出 key 和 value

for (Integer i : Sites.keySet()) {
            System.out.println("key: " + i + " value: " + Sites.get(i));
        }

b. 输出每一个value

for(String value: Sites.values()) {
          // 输出每一个value
          System.out.print(value + ", ");
        }

6. 迭代器 Iterator

(1) 使用方法:

ArrayList<String> sites = new ArrayList<String>();
Iterator<String> it = sites.iterator();
while(it.hasNext()) {
    System.out.println(it.next());
}

(2) 删除元素

Iterator<Integer> it = numbers.iterator();
while(it.hasNext()) {
    Integer i = it.next();
    if(i < 10) {  
        it.remove();  // 删除小于 10 的元素
    }
}

7. 泛型

(1) 使用例子:

  1. public class Box<T> {
  2. private T t;
  3. public void add(T t) {
  4. this.t = t;
  5. }
  6. public T get() {
  7. return t;
  8. }
  9. public static void main(String[] args) {
  10. Box<Integer> integerBox = new Box<Integer>();
  11. Box<String> stringBox = new Box<String>();
  12. integerBox.add(new Integer(10));
  13. stringBox.add(new String("菜鸟教程"));
  14. System.out.printf("整型值为 :%d\n\n", integerBox.get());
  15. System.out.printf("字符串为 :%s\n", stringBox.get());
  16. }
  17. }

(2) 类型通配符 ?。例如 List<?> 是 List<String>,List<Integer> 等的父类。

  1. public static void getData(List<?> data) {
  2. System.out.println("data :" + data.get(0));
  3. }

(3) 类型通配符限定:  extends Number

  1. public static void getUperNumber(List<? extends Number> data) {
  2. System.out.println("data :" + data.get(0));
  3. }

  表示类型只能接受 Number 及其上层父类类型,String 不在这个范围之内,会报错

8. 序列化

(1) 序列化对象

  1. {
  2. Employee e = new Employee();
  3. try {
  4. FileOutputStream fileOut = new FileOutputStream("/tmp/employee.ser");
  5. ObjectOutputStream out = new ObjectOutputStream(fileOut);
  6. out.writeObject(e);
  7. out.close();
  8. fileOut.close();
  9. }catch(IOException i) {
  10. i.printStackTrace();
  11. }
  12. }

注意要捕捉 IOException异常

(2) 反序列化对象

  1. {
  2. Employee e = null;
  3. try {
  4. FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
  5. ObjectInputStream in = new ObjectInputStream(fileIn);
  6. e = (Employee) in.readObject();
  7. in.close();
  8. fileIn.close();
  9. }catch(IOException i) {
  10. i.printStackTrace();
  11. return;
  12. }catch(ClassNotFoundException c) {
  13. System.out.println("Employee class not found");
  14. c.printStackTrace();
  15. return;
  16. }
  17. }
  18. }

注意要捕捉 IOException和ClassNotFoundException异常

9. 网络编程

(1) 服务端部分:

  1. {
  2. //创建ServerSocket,绑定端口
  3. ServerSocket serverSocket = new ServerSocket(port);
  4. serverSocket.setSoTimeout(10000);
  5. //接受客户端,创建Socket
  6. Socket server = serverSocket.accept();
  7. //创建数据输入流,读取数据
  8. DataInputStream in = new DataInputStream(server.getInputStream());
  9. System.out.println(in.readUTF());
  10. }

(2) 客户端部分

  1. {
  2. //输入host和port,连接服务器
  3. Socket client = new Socket(serverHost, port);
  4. //创建数据输出流,向服务端发送数据
  5. OutputStream outToServer = client.getOutputStream();
  6. DataOutputStream out = new DataOutputStream(outToServer);
  7. out.writeUTF("Hello from " + client.getLocalSocketAddress());
  8. //创建数据输入流,接收服务端数据
  9. InputStream inFromServer = client.getInputStream();
  10. DataInputStream in = new DataInputStream(inFromServer);
  11. System.out.println("服务器响应: " + in.readUTF());
  12. //关闭socket
  13. client.close();
  14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/802887
推荐阅读
相关标签
  

闽ICP备14008679号