容器
学习主题:容器
学习目标:
1.掌握Vector,以及与ArrayList的区别
2.掌握Map接口下的HashMap和HashTable
1.Vector用法和ArrayList区别
(1)Vector的特有方法有哪些?
//添加
vector.add(“hello”);
vector.add(1, “world”);
vector.addElement(“java”);
System.out.println(vector);
//删除
vector.remove(“java”);
vector.remove(0);
vector.removeElement(“world”);
System.out.println(vector);
System.out.println("加强for循环");
for(Object obj:vector){
System.out.println(obj);
}
System.out.println("迭代器");
for(Iterator ite =vector.iterator();ite.hasNext();){
System.out.println(ite.next());
}
(2)Vector与ArrayList的区别是什么?
1、Vector的add()方法是同步方法,ArrayList的add()方法不同步
2、Vector是在调用构造方法时直接初始化容量为10,ArrayList是在第一次调用添加方法时初始化容量为10;
3、Vector每次扩充容量扩成原先的1.5倍,ArrayList扩充成原先的2倍
4、Vector的jdk版本是1.0,ArrayList的jdk版本是1.2的
5、Vector是线程同步的,安全性高,效率低
ArrayList是线程非同步的,安全性低,效率高
2.Map接口_HashMap_Hashtable的用法详解
(1)Map接口常用的方法有哪些?
获取集合元素的个数Size() , 判断集合是否为空isEmpty() , 判断是否存在这个键containsKey() ,获取元素 get() ,添加元素 put() , 删除元素remove() ,清空clear() ,获取所有键keySet() ,获取所有值 values() , 获取键和值的关系entrySet()
(2)HashMap与Hashtable的异同是什么?
1、版本不同HashMap jdk1.2 ,HashTable jdk1.0
2、HashMap继承了AbstractMap ,实现了Map接口,HashTable继承了Dirctionary实现Map接口
3、HashMap允许null值和null键,但是null作为key只允许一个,HashTable非null得键和值
4、HashMap是线程不同步的(效率高,安全性低),HashTable(效率低,安全性高)线程同步
3.HashMap的底层原理
(1)HashMap的底层数据结构是什么?
哈希表,本质就是(数组+链表)
(2)简述哈希表的去重原理?
1、先计算该元素的哈希码值
2、然后根据y=k(x)这个函数计算出该元素的存储位置
3、如果该存储位置上已有元素,调用equals方法判断元素内容是否相等,如果相等则直接删除
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
学习主题:容器
学习目标:
1 掌握二叉树和红黑树
2 掌握TreeMap
3 掌握Set接口下的HashSet和TreeSet
4 掌握泛型
1.二叉树和红黑树
(1)简述树的概念和特征?
1、树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。
2、父子关系在树的结点之间建立了一个层次结构
3、树的结点包含一个数据元素以及若干指向其子树的若干分支
4、在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根节点,或简称为树根。
(2)什么样的树被称为红黑树?
R-B Tree ,全称为Red-Black Tree ,它是一种平衡二叉树。红黑树的美国节点上都有存储位表示节点的颜色,可以是红或者黑。
(1)每个节点是黑色或者红色
(2)根节点是黑色
(3)每个叶子节点是黑色,叶子节点是指为空的叶子节点
(4)如果一个节点是红色的,则它的子节点必须是黑色的
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点
2.TreeMap的使用和底层实现
(1)TreeMap的常用构造方法有哪些?
元素的个数size() ,判断是否含有这个key值 containsKey() , 判断是否含有这个value值containsValue() ,获取元素 get() ,删除元素 remove() ,清空 clear()
(2)TreeMap的底层数据结构是什么?
红黑树(平衡二叉树)
3.Set接口_HashSet的用法
(1)Set集合存储元素的特征?
Set存储的元素是唯一的,但是无序
(2)Set接口常用的子类有哪些?
HashSet , TreeSet
4.HashSet底层实现_JDK源码分析
(1)HashSet的底层数据结构概念?
哈希表(顺序表+链表)
(2)HashSet与HashMap的关系?
HashSet使用了HashMap 的数据结构
5.TreeSet的使用_JDK源码分析
(1)TreeSet的底层数据结构是什么?在存储自定义元素时是通过什么方式去掉重复元素的?
1.TreeSet底层数据结构是TreeMap(红黑树);通过比较器。比较的结果为0,那么就不在添加了。
(2)TreeSet集合的特点?
唯一,有序
6.泛型
(1)为什么需要泛型?使用泛型的好处有哪些?
因为jdk1.4以前类型不明确:装入集合的类型都被当做Object对待,从而失去自己的实际类型。从集合中取出时往往需要转型,效率低,容易产生错误。使用泛型可以增强程序的可读性和安全性。
(2)泛型分几类,分列举例说明?
//泛型类
MyGeneric m1=new MyGeneric();
MyGeneric m2=new MyGeneric();
//泛型接口
class MyInplement implements MyInterFace{
}
class MyInplement1 implements MyInterFace{
}
class TestMyInteFace{
public static void main(String[] args) {
MyInplement m1=new MyInplement();
MyInplement1 m2=new MyInplement1();
}
//泛型方法
public void show(T t){ //在创建MyMethod对象的时候决定
System.out.println(“t”);
}
public void method(Q q){ //在调用Method方法时明确
System.out.println(“Q”);
}
public void Fun(K…k){ //可变参数的泛型方法
for (int i = 0; i < k.length; i++) {
System.out.println(k[i]);
}
}
public static void main(String[] args) {
MyMethod<String> me=new MyMethod<String>();
me.show("hello");//在创建类的对象时明确了数据类型为String
//有了泛型,可以解决参数个数相同的情况下方法重载
me.method("hello");
me.method("world");
me.method(123);
//解决参数个数不同,不同类型的方法重载
me.Fun("hello");
me.Fun("wor"+"ho"+"sq");
me.Fun(123,345);
}
7.泛型的高级使用_容器中使用泛型
(1)泛型的高级应用分为哪两类?
泛型的上限和泛型的下限
(2)泛型的上限指的是什么含义,请举例说明?
泛型的上限:使用关键字extends,表示参数化的类型可能是所指定的类型或者是此类型的子类。
//Person以及Person的子类
public static void print(ArrayList< ? extends Person> al ){
//遍历
for (Person p : al) {
System.out.println§;
}
}
上一篇: QMap+QVariant容器
下一篇: Maven 了解
推荐阅读
-
Spring IOC容器
-
js控制容器隐藏出现防止样式变化的两种方法_javascript技巧
-
在Docker容器中使用docker命令
-
不同物理机中的Docker容器互连(Openvswitch)
-
Docker容器安装的mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'
-
Laravel中“服务提供者”和“服务容器”的关系是什么?
-
Laravel的“服务容器”和“服务提供者”,哪个是laravel 的核心?
-
Docker配置本地镜像与容器的存储位置
-
Docker容器化PHP开发环境搭建-DVWA (含xdebug调试)
-
CentOS7 Docker容器文件挂载权限