容器总结
-
Collection 表示一组对象,它是集中、收集的意思,就是把一些数据收集起来。
-
Collection接口的两个子接口:
- List中的元素有顺序,可重复。常用的实现类有ArrayList、LinkedList和 vector。
Ø ArrayList特点:查询效率高,增删效率低,线程不安全。 Ø LinkedList特点:查询效率低,增删效率高,线程不安全。 Ø vector特点:线程安全,效率低,其它特征类似于ArrayList。
- Set中的元素没有顺序,不可重复。常用的实现类有HashSet和TreeSet。
Ø HashSet特点:采用哈希算法实现,查询效率和增删效率都比较高。 Ø TreeSet特点:内部需要对存储的元素进行排序。因此,我们对应的类需要实现Comparable接口。这样,才能根据compareTo()方法比较对象之间的大小,才能进行内部排序。
-
实现Map接口的类用来存储键(key)-值(value) 对。Map 接口的实现类有HashMap和TreeMap等。Map类中存储的键-值对通过键来标识,所以键值不能重复。
-
Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
-
类 java.util.Collections 提供了对Set、List、Map操作的工具方法。
-
如下情况,可能需要我们重写equals/hashCode方法:
-
要将我们自定义的对象放入HashSet中处理。
-
要将我们自定义的对象作为HashMap的key处理。
-
放入Collection容器中的自定义对象后,可能会调用remove、contains等方法时。
-
-
JDK1.5以后增加了泛型。泛型的好处:
-
向集合添加数据时保证数据安全。
-
遍历集合元素时不需要强制转换。
-
另外还有一些重要的知识点如下:
接下来把上面的表格中的数据用容器存储:
package com.gk.collection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 测试表格数据的存储
* ORM思想的简单实验:map表示一行数据,多行数据是多个map;最后将多个map放到list中
* @author 康哥
*
*/
public class TestStareData {
public static void main(String[] args) {
Map<String,Object> row1 = new HashMap<>();
row1.put("id", 1001);
row1.put("姓名", "张三");
row1.put("薪水", 20000);
row1.put("入职日期", "2019.8.8");
Map<String,Object> row2 = new HashMap<>();
row2.put("id", 1002);
row2.put("姓名", "李四");
row2.put("薪水", 50000);
row2.put("入职日期", "2016.6.8");
Map<String,Object> row3 = new HashMap<>();
row3.put("id", 1003);
row3.put("姓名", "李四");
row3.put("薪水", 10000);
row3.put("入职日期", "2020.3.8");
//定义一个ArrayList,把前面的map都放进去
List<Map<String,Object>> table = new ArrayList<>();
table.add(row1);
table.add(row2);
table.add(row3);
//遍历ArrayList,打印输出表格信息
for(Map<String,Object> row : table) {
Set<String> keySet = row.keySet();
for(String key : keySet) {
System.out.print(key + ":" + row.get(key) + "\t");
}
System.out.println();
}
}
}
运行结果:
package com.gk.collection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 测试表格数据的存储,体会ORM思想
* 每一行数据使用javabean存储,多行使用放到Map或List中
* @author 康哥
*
*/
public class TestStareDate02 {
public static void main(String[] args) {
User user1 = new User(1001, "张三", 20000, "2019.8.8");
User user2 = new User(1002, "李四", 50000, "2016.6.8");
User user3 = new User(1003, "王五", 10000, "2020.3.8");
//使用List封装数据
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
for( User user : list) {
System.out.println(user);
}
//使用Map封装数据
Map<Integer,User> map = new HashMap<>();
map.put(1001, user1);
map.put(1002, user2);
map.put(1003, user3);
Set<Integer> keySet = map.keySet();
for(Integer key : keySet) {
System.out.println(key + "--" + map.get(key));
}
}
}
class User{
private int id;
private String name;
private double salary;//工资
private String hiredate;//入职日期
public User() {
}
public User(int id, String name, double salary, String hiredate) {
super();
this.id = id;
this.name = name;
this.salary = salary;
this.hiredate = hiredate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getHiredate() {
return hiredate;
}
public void setHiredate(String hiredate) {
this.hiredate = hiredate;
}
@Override
public String toString() {
return "id:" + id + ",name:" + name + ",salary:" + salary + ",hiredate:" + hiredate;
}
}
运行结果: