知识屋:更实用的电脑技术知识网站
所在位置:首页 > 教育

学无止境之小白学java……第012天

发表时间:2022-03-25来源:网络

学习主题:容器

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应作业:

1. Vector用法和ArrayList区别

(1) Vector的特有方法

1、 public void addElement(E obj)将指定的组件添加到此向量的末尾。2、 public E elementAt(int index)返回指定索引处的组件。此方法的功能与 get(int) 方法的功能完全相同(后者是 List 接口的一部分)。3、 public Enumeration elements()返回此向量的组件的枚举。返回的 Enumeration 对象将生成此向量中的所有项。生成的第一项为索引 0 处的项,然后是索引 1 处的项,依此类推。

(2) Vector与ArrayList的区别

底层数据结构相同,都是object类型的数组

1、 Vector 的add()方法是同步方法,ArrayList的add()方法是非同步方法2、 Vector扩容每次扩充1倍,ArrayList每次扩充0.5倍3、 Vector是在调用构造方法时,直接初始化容量为10,ArrayList是在第一次调用添加方法时,初始化容量为104、 Vector的版本是JDK1.0,ArrayList的版本为JDK1.25、 Vector是线程同步的,安全性高,效率低,ArrayList是线程非同步的,安全性能低,效率高

2. Map接口_HashMap_Hashtable的用法详解

(1) Map接口常用的方法

1、 实现Map接口的类用来存储键(key)—值(value)对2、 Map接口的实现类有HashMap 和TreeMap等3、 Map类中存储的键-值对通过键来标识,随意键不能重复

Map接口常用的方法:

put() 添加元素remove() 移除元素 先输出后移除keyset() 获取所有key的集合values() 获取所有value的集合entrySet() 获取所有key-value关系的集合

(2) HashMap与Hashtable的异同?

1、 版本不同 HashMap JDK1.2 Hashtable JDK1.02、 HashMap继承了AbstractMap,实现了Map接口,Hashtable继承了Dictionary实现Map接口3、 HashMap允许null值和null键,但是null作为key值允许一个,Hashtable非null的键和值4、 HashMap是线程不同步的(效率高,安全性低),Hashtable 线程同步(效率低,安全性高)

3. HashMap的底层原理

(1) HashMap的底层数据结构

HashMap 底层实现采用了哈希表数据结构,哈希表的本质就是“数组+链表”

(2) 简述哈希表的去重原理

1、 计算Integer类型对象的HashCode值2、 根据y=k(x)函数,计算存储位置,x是HashCode值,y是存储的位置3、 如果该位置上有元素,需要调用equals(…)方法比较元素的内容是否相同,如果不相同,使用链表链接,如果相同则不再添加

1. 二叉树和红黑树

(1) 树的概念和特征

1、 树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为输的节点,所定义的关系称为父子关系。2、 父子关系在树的结点之间建立了一个层次结构。3、 树的结点包含了一个数据元素及若干指向其子树的若干分支。4、 在这种乘次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,或称为树根。

2. TreeMap的使用和底层实现

(1) TreeMap的常用构造方法

put()——集合中添加元素containsKey()——判断集合中键是否存在containsValue()——判断集合中值是否存在get(key)——根据键获取值

(2) TreeMap的底层数据结构是红黑树

3. Set接口_HashSet的用法

(1) Set集合存储元素的特征是唯一、 无序

HashSet底层数据结构是hash表,主结构是数组+链表

(2) Set接口常用的子类

1、HashSet : 内部数据结构是哈希表, 是不同步的2、LinkedHashSet : 存入和取出的顺序一致(有序)3、TreeSet : 可以对 Set 集合中的元素进行排序, 是不同步的.

4. HashSet底层实现_JDK源码分析

(1) HashSet的底层数据结构概念

HashSet底层数据结构是hash表,主结构是数组+链表

(2) HashSet与HashMap的关系

HashSet使用了HashMap的数据结构创建HashSet时,底层创建的是一个HashMap对象

5. TreeSet的使用_JDK源码分析

(1) TreeSet的底层数据结构是TreeMap,TreeMap的底层数据是红黑树

在存储自定义元素时要求必须具备比较规则

(2) TreeSet集合的特点是唯一,,有序,,升序

6. 泛型

(1) 为什么需要泛型?使用泛型的好处有哪些?

JDK1.4以前类型不明确:装入集合的类型都被当作Object对待,从而失去自己的实际类型。从集合中取出时往往需要转型,效率低,容易产生错误。

解决办法:在定义集合的同时定义集合中对象的类型

优点:增强程序的可读性和安全性

(2) 泛型的分类

1、 泛型类

泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map。

2、 泛型接口

泛型接口与泛型类的定义及使用基本相同。泛型接口常被用在各种类的生产器中

3、 泛型方法

泛型方法,是在调用方法的时候指明泛型的具体类型

7. 泛型的高级使用_容器中使用泛型

(1) 泛型的高级应用分两类

泛型的上限:使用关键字extends,表示参数化的类型可能是所指定的类型或者是此类型的子类

泛型的下限:使用关键字super进行声明,表示参数化的类型可能是所指定的类型,或者四此类型的父类型,直至object类

(2) 为泛型添加上限,即传入的类型实参必须是指定类型的子类型

import java.util.ArrayList; import java.util.Collection; import java.util.List; public class TestList { public static void main(String[] args) { test01(); test02(); test03(); } public static void test01(){ Collection c = new ArrayList(); System.out.println(c.size()); System.out.println(c.isEmpty()); //添加元素 c.add("高老大"); c.add("高老二"); System.out.println(c); System.out.println(c.size()); //判断元素是否存在 System.out.println(c.contains("高老五")); //转换为一个数组 Object[] objs = c.toArray(); System.out.println(objs); //移除元素 c.remove("高老二"); System.out.println(c); //清空所有的元素 c.clear(); System.out.println(c); } public static void test02(){ List list01 = new ArrayList(); list01.add("aa"); list01.add("bb"); list01.add("cc"); List list02 = new ArrayList(); list02.add("aa"); list02.add("dd"); list02.add("ee"); System.out.println("list01:"+list01); // list01:[aa, bb, cc] //list01.addAll(list02); //把list02的元素添加到list01中 list01:[aa, bb, cc, aa, dd, ee] //list01.removeAll(list02); //移除list01中的和list02相同的元素 list01:[bb, cc] list01.retainAll(list02); //取两个的交集 list01:[aa] System.out.println("list01:"+list01); System.out.println(list01.contains(list02)); //判断list01 中是否包含了list02 的所有元素 false } public static void test03(){ List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); System.out.println(list); list.add(2, "高淇");//在指定位置添加元素 System.out.println(list); list.remove(2);//移除指定位置的元素 System.out.println(list); list.set(2, "高老二");//替换指定位置的元素 System.out.println(list); System.out.println(list.get(2));//获取指定位置的元素内容 list.add("C"); list.add("B"); list.add("A"); System.out.println(list); System.out.println(list.indexOf("B"));//获取元素首次出现的位置,若不在,返回-1 System.out.println(list.lastIndexOf("B"));//获取元素最后一次出现的位置,若不在,返回-1 } }

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜