赞
踩
Java2中引入了一种新的框架-集合框架(Collection)
a. 用得最多的是list接口和set接口。
b. List 接口存储的是有序的,可以重复的元素。
Set 接口存储的是无序的,不重复的数据。
c. List接口检索效率高,插入和删除效率低。
Set接口检索效率低,插入和删除效率高。
d. Map.Entry: 描述Map中的一个元素(键/值对)。
a. ArrayList: 实现了List的接口, 随机访问和遍历元素时效率高,插入删除效率低。多线程不安全。
b. TreeSet: 实现了Set接口,随机访问和遍历元素时效率低,插入删除效率高。多线程不安全。可以实现排序等功能。
c. HashMap: 实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度。多线程不安全。
d. 此外常用的还有Vector,ConcurrentHashMap
a. Vector,HashTable,ConcurrentHashMap 是线程安全的。
b. ArrayList,LinkedList,HashMap,TreeMap,HashSet,TreeSet都不是线程安全的。
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());
}
a. 集合框架的类和接口均在java.util包中。
b. 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。
(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 中的元素实际上是对象, 所以基本类型要换成包装类
int | Integer |
long | Long |
float | Float |
char | Character |
(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();
(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 + ", ");
}
(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 的元素
}
}
(1) 使用例子:
- public class Box<T> {
- private T t;
-
- public void add(T t) {
- this.t = t;
- }
- public T get() {
- return t;
- }
-
- public static void main(String[] args) {
- Box<Integer> integerBox = new Box<Integer>();
- Box<String> stringBox = new Box<String>();
- integerBox.add(new Integer(10));
- stringBox.add(new String("菜鸟教程"));
- System.out.printf("整型值为 :%d\n\n", integerBox.get());
- System.out.printf("字符串为 :%s\n", stringBox.get());
- }
- }
(2) 类型通配符 ?。例如 List<?> 是 List<String>,List<Integer> 等的父类。
- public static void getData(List<?> data) {
- System.out.println("data :" + data.get(0));
- }
(3) 类型通配符限定: extends Number
- public static void getUperNumber(List<? extends Number> data) {
- System.out.println("data :" + data.get(0));
- }
表示类型只能接受 Number 及其上层父类类型,String 不在这个范围之内,会报错
(1) 序列化对象
- {
- Employee e = new Employee();
- try {
- FileOutputStream fileOut = new FileOutputStream("/tmp/employee.ser");
- ObjectOutputStream out = new ObjectOutputStream(fileOut);
- out.writeObject(e);
- out.close();
- fileOut.close();
- }catch(IOException i) {
- i.printStackTrace();
- }
- }
注意要捕捉 IOException异常
(2) 反序列化对象
- {
- Employee e = null;
- try {
- FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
- ObjectInputStream in = new ObjectInputStream(fileIn);
- e = (Employee) in.readObject();
- in.close();
- fileIn.close();
- }catch(IOException i) {
- i.printStackTrace();
- return;
- }catch(ClassNotFoundException c) {
- System.out.println("Employee class not found");
- c.printStackTrace();
- return;
- }
- }
- }
注意要捕捉 IOException和ClassNotFoundException异常
(1) 服务端部分:
- {
- //创建ServerSocket,绑定端口
- ServerSocket serverSocket = new ServerSocket(port);
- serverSocket.setSoTimeout(10000);
- //接受客户端,创建Socket
- Socket server = serverSocket.accept();
- //创建数据输入流,读取数据
- DataInputStream in = new DataInputStream(server.getInputStream());
- System.out.println(in.readUTF());
- }
(2) 客户端部分
- {
- //输入host和port,连接服务器
- Socket client = new Socket(serverHost, port);
- //创建数据输出流,向服务端发送数据
- OutputStream outToServer = client.getOutputStream();
- DataOutputStream out = new DataOutputStream(outToServer);
- out.writeUTF("Hello from " + client.getLocalSocketAddress());
- //创建数据输入流,接收服务端数据
- InputStream inFromServer = client.getInputStream();
- DataInputStream in = new DataInputStream(inFromServer);
- System.out.println("服务器响应: " + in.readUTF());
- //关闭socket
- client.close();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。