1、常用Collection继承结构图及说明:
1.1 哈希表/散列表数据结构
一、关于Collection常用方法:
(
新建Collection:
Collection co1 = new ArrayList();// 多态
Collection co2 = new LinkedList();// 多态
Collection co3 = new Vector();// 多态
)
1. boolean add(E e) : 向集合中添加元素
2. boolean addAll(Collection<? extends E> c) : 将指定集合中的所有元素添加到这个集合(可选操作)。
3. void clear() : 从这个集合中移除所有的元素(可选操作)。
4. boolean contains(Object o) : 返回 true如果集合包含指定元素。底层调用的equals()方法。因此存储在集合中的对象,都要重写equals()方法,否则为内存地址的比较。
5. boolean containsAll(Collection<?> c) : 返回 true如果这个集合包含指定集合的所有元素。
6. boolean equals(Object o) : 将指定的对象与此集合进行比较,以进行相等性。
7. int hashCode() : 返回此集合的哈希代码值。
8. boolean isEmpty() : 返回 true如果集合不包含任何元素。
9. Iterator<E> iterator() : 迭代器。迭代器的remove()方法在删除时不会动内存中的集合,集合自带的remove()会实时删除内存中的集合,需要实时更新迭代器才可以。推荐使用迭代器删除
10. default Stream<E> parallelStream() : 返回一个可能并行 Stream与集合的来源。
11. boolean remove(Object o) : 从这个集合中移除指定元素的一个实例,如果它是存在的(可选操作)。存储在集合中的对象,都要重写equals()方法,否则为内存地址的比较。
12. boolean removeAll(Collection<?> c) : 删除此集合中包含的所有元素(可选操作)的所有元素(可选操作)。
13. default boolean removeIf(Predicate<? super E> filter) : 删除满足给定谓词的这个集合的所有元素。
14. boolean retainAll(Collection<?> c) : 仅保留包含在指定集合中的这个集合中的元素(可选操作)。
15. int size() : 返回此集合中的元素的数目。
二、List常用方法:
(
List除了继承了Collection中的方法外,还有一些自己的方法,如get(index)、add(index,Object)。List初始化时预估大小,防止频繁扩容降低效率。
新建List:
List co1 = new ArrayList(50);// 默认ArrayList初始化为10,每次扩容添加1.5倍
List co2 = new LinkedList();// 多态
List co3 = new Vector();// 默认LinkedList初始化为10,每次扩容添加2倍
)
1.add(int index, E element) 在列表中指定的位置上插入指定的元素
2.get(int index) 返回此列表中指定位置的元素。
三、Set常用方法
(
Set除了继承了Collection中的方法外,还有一些自己的方法,如 。
新建Set,默认初始化容量16,加载因子为0.75:
Set st1 = new HashSet();// HashSet底层实际上是使用了HashMap中key的原理,无序不重复。哈希表/散列表,是数组和LinkedList优点的集合,其本质是个数组,但其中每个元素是一个个链表,类似于字典查询,判断增删查效率都很高。
// 因为在添加元素时会调用HashCode方法生成数组下标,然后调用equals方法判断是否重复,所以在往HashSet中添加实体类的时候,需要重写HashCode和equals方法,否则对比的是两个内存地址。
SortedSet st2 = new TreeSet()// 无序不可重复,但是存进去的元素可以按照大小自动排序(数值、时间、字符串均可以,因为存储的元素实现了comparable接口)
)
1.hashCode() 返回此组的哈希代码值。
应用实例:
public static void main(String[] args) {
Collection co = new ArrayList();// 多态
// List有自己的私有方法,如get(index)、add(index,Object),如果有需要使用到这些方法,应该直接创建List对象。使用时注意初始化大小,避免频繁扩容
// List ls = new ArrayList();
// List ls = new LinkedList();//list的多态
co.add(1);
co.add(new Integer(100));
Object o = new Object();
co.add(o);
Customer cus = new Customer("Make", 34);
co.add(cus);// 存储单值,会自动调用toString方法
System.out.println(co.size());
System.out.println(co.isEmpty());
Object[] objs = co.toArray();
for (Object obj : objs) {
System.out.println("obj>>" + obj);
}
// 迭代、遍历,获取迭代器对象。不需要关心底层集合的具体类型,所有集合依赖的迭代器都实现了java.util.Iterator接口
Iterator it = co.iterator();// 迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的“迭代器对象”
// while写法
while (it.hasNext()) {
// it.next()将迭代器向下移动一位,并去除指向的元素,初始时it不指向元素,调用next()时指向第一个元素,调用next()之前,必须调用hasNext()
System.out.print("itItem>>" + it.next() + "; ");
}
System.out.println();
// for写法
for (Iterator it2 = co.iterator(); it2.hasNext();) {
Object element = it2.next();
System.out.print("element>>>" + element + "; ");
}
System.out.println();
co.clear();
System.out.println(co.size());
System.out.println(co.isEmpty());
}
static class Customer {
String name;
int age;
Customer(String name, int age) {
this.age = age;
this.name = name;
}
// 重写toString()
public String toString() {
return "Customer[name = " + name + ", age = " + age + "]";
}
// equals(E)方法。
// contains(o)比较:自己创建的对象,对比两个内容相同对象,
// 对象没重写equals(o)方法则对比的是对象的内存地址,结果不会返回true。
// 而集合对象内部的比较已经重新了equals方法
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof Customer) {
Customer c = (Customer)o;
if (c.age == this.age && c.name.equals(this.name)) {
return true;
}
}
return false;
}
}
2、常用Map继承结构图及说明:
一、Map简单介绍
创建如:Map p = new HashMap();
方法 | 说明 |
---|---|
void clear() | 清空 |
Object remove(Object key) | 通过key值移除一个键值对 |
boolean remove(Object key, Object value) | 仅当它当前映射到指定的值时,为指定的键移除条目 |
int size() | 返回这个映射中的键值映射的数目 |
boolean isEmpty() | 是否为空 |
Object put(Object key, Object value) | 插入键值对 |
Object get(Object key) | 返回key值对应的value |
boolean containsKey(Object key) | 判断Map是否包含一个指定key |
boolean containsValue(Object value) | 判断Map是否包含一个指定value |
Collection values() | 获取Map中所有的value集合 |
Set keySet() | 获取Map中所有的key集合 |
Set entrySet() | 返回一个 Set视图的映射包含在这个Map |
二、Properties简单介绍
创建如:Properties p = new Properties();
方法 | 说明 |
---|---|
String getProperty(String key) | 返回key值对应的value |
Object setProperty(String key, String value) | 插入键值对,key和value均为字符串 |
IO+Properties结合简例
/**
* IO+Properties
* dataBase.properties这样的文件称作配置文件,其作用就是使程序更加灵活
*
* 注意:一般在程序中可变的东西不要写死,推荐写到配置文件中,可以运行相同代码产生不同结果
*
* 属性文件在java规范中要求以“.properties”作为后缀
*
* 属性文件格式要求:
* key和value之间可以使用“空格”、“冒号”、“等号”。
* 如果“空格”、“冒号”、“等号”都有,按最前的作为分隔符
*
* tip:在cmd.exe中native2ascii命令可以将中文转换为Unicode码,属性文件中中文使用Unicode码可以解决乱码的情况
*/
public class IOAndProperties {
public static void main(String[] args) throws IOException {
// 1、创建属性对象
Properties ps = new Properties();// 和Map一样,只不过key和value只能存储字符串类型
// 2、创建输入流
FileInputStream is = new FileInputStream("E:\\learing\\temporary\\dataBase.properties");// username=name
// password=123456
// 将is流中的所有数据加载到属性对象中,其结果是一组组键值对
ps.load(is);
// 关闭流
is.close();
// 通过getProperty(K)方法,使用key值获取value,
System.out.println("username>>>" + ps.getProperty("username"));
System.out.println("password>>>" + ps.getProperty("password"));
}
}
三、SortedMap简单介绍
说明:SortedMap中的key,无序不可重复,但是存进去的元素可以按照大小自动排列,如想自动排序,key部分需要实现Comparable接口,还要单独有个比较器。
创建如:SortedMap t = new TreeMap();
注意:
1、储在Map集合key部分的元素需要同时重写hashCode和equals方法1
2、HashMap默认初始化容量16,默认加载因子为0.75
3、HashTable默认初始化容量16,默认加载因子为0.75/
4、Properties也中key、value都是由字符串组成
5、Collections是一个工具类,可以用于对list排序等,而Collection是一个接口类。Collections的sort()方法仅对实现了comparable接口的有效。