-Collection<E>
--->是一个单列的集合
------------------------
* Map<K, V>
map中需要存放两个元素
一个是K:Key-->键
一个是V:Value--->Value
----->map是一个双列的集合
每一个K和V之间存在着关系:映射关系
Map的特点:
map的每一个对元素都是以键值对儿的形式存在的。map中的键是唯一的,只能通过键来唯一的获取值。
Map中的常用的方法:
1、增
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
2、删
clear();
V remove(Object key):移除掉Key对应的键值对,返回Key对应的Value
3、改
put(K key, V value)
4、查
get(Object key)
int size();
values();
--------------
entrySet() *****
keySet() *****
5、判断:
containsKey(Object key)
containsValue(Object value)
isEmpty()
常用的子类
----HashTable:底层的数据结构是哈希表,K-V不可以存在null值,Hashtable是同步的 ,效率低,jdk1.0
----HashMap:底层的数据结构是哈希表,K-V可以存在null值,HashMap是不同步的 ,效率高,jdk1.2
----TreeMap:底层的数据结构是二叉树,如果要对我们的map进行排序,就是使用treemap,是按照我们的映射关系中的key来进行排序
Map中的两种取出元素的方式
* ---- Set<K> keySet:
* 获 取map中的所有的key组成一个集合Set,通过我们Set来进行操作,得到Iterator,迭代每一个元素(Key),然后在通过
* map.get(Key)获得对应的value
* ----Set<Map.Entry<K,V>> entrySet:获取map中所有的k-v的映射关系==》Set,通过我们Set来进行操作,
* 得到Iterator,迭代器的每一个元素都是一个映射关系的实例,通过实例提供的api(getKey,getValue)来获取我们map
* 中的每一对儿键值对儿
Comparable和Comparator区别:
* 在jdk的位置:
* Comparable是在java.lang包下的一个接口
* Comparator是在java.util包下的一个接口
* 在哪里使用?
* 如果要让我们的对象(集合元素)具备一个比较性,这个时候就需要用到了Comparable接口
* 如果要让我们的集合能够比较集合中的元素,这时就需要使用Comparator
* ===》Comparable在我们的元素身上实现,Comparator在我们集合定义的时候作为比较器参数传入
* 要复写的方法?
* 实现Comparable接口,只需要复写其中的int compareTo(T t)即可
* 使用Comparator接口,只需要复习其中的int compare(T t1, T t2)即可
可变参数
* 使用可变参数的时候,必须要把可变参数放到我们参数列表的最后面
这个是编译不通过的,因为可变参数必须要放到我们参数列表的最后面,便于我们对参数进行解析
public static int add1(int... arr, String str) {
System.out.println(str);
int sum = 0;
for(int a : arr) {
sum += a;
}
return sum;
jdk1.5之后出现的新特性——高级for循环,增强for循环
* foreach语句的书写格式:
* for(数据类型 变量名 : 要进行遍历的(Collection)集合或者数组) {
* 获取变量,然后进行操作
* }
* 要能够使用foreach,对象需要实现Iterable接口
* 实际上foreach底层就是使用iterator来做的,只不过简化了我们的书写
* foreach和我们的迭代器有啥区别?
* 实际上foreach底层就是迭代器来做的,只不过是为了简化书写
* foreach和我们普通for循环有啥区别?
* foreach无法操作角标,
* 普通for循环是可以进行操作角标,
* 如果在遍历的过程中需要用到角标或者需要++/--的操作,那么建议使用普通的for循环;反之,能用foreach就用foreach
packa/Student
packb/Studnet
import packa.Student;
import packb.Student;
class Test {
void method() {
new packa.Student();
}
}
如果我们同时在一个class文件里面,引入两个不同包,但类名称相同的对象,在要创建这个相同类名的对象的时候,需要指定全类名加以区分
在进行静态导入的时候,方法重名的时候,需要我们加类型进行区分
java.util.Date;
java.sql.Date;
new java.util.Date();