实用数据结构辅导知识点.docx

上传人:b****5 文档编号:11634895 上传时间:2023-03-29 格式:DOCX 页数:35 大小:357.62KB
下载 相关 举报
实用数据结构辅导知识点.docx_第1页
第1页 / 共35页
实用数据结构辅导知识点.docx_第2页
第2页 / 共35页
实用数据结构辅导知识点.docx_第3页
第3页 / 共35页
实用数据结构辅导知识点.docx_第4页
第4页 / 共35页
实用数据结构辅导知识点.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

实用数据结构辅导知识点.docx

《实用数据结构辅导知识点.docx》由会员分享,可在线阅读,更多相关《实用数据结构辅导知识点.docx(35页珍藏版)》请在冰豆网上搜索。

实用数据结构辅导知识点.docx

实用数据结构辅导知识点

常璐璐,赵玉霞编

1数组,Arrays类

学习目标:

1.掌握关于数组概念2.掌握Arrays类以及常用方法

1.回忆数组概念、定义及使用;

2.掌握Arrays类常用方法

3.继承关系:

Arrays类是Object类直接子类。

如下图所示:

Arrays类常用方法:

sort()对指定的类型数组按数字升序进行排序。

binarySearch()使用二分搜索法来搜索指定的类型数组,以获得指定的值。

equals()用于比较两个数组是否相等。

fill()用以某个值填充整个数组。

asList()接受任意的数组为参数,将其转变为List容器。

Java的二分查找算法:

  

privatestaticintbinarySearch0(Object[]a,intfromIndex,inttoIndex,Objectkey){

intlow=fromIndex;

inthigh=toIndex-1;

while(low<=high){

intmid=(low+high)/2;

ComparablemidVal=(Comparable)a[mid];

intcmp=midVpareTo(key);

if(cmp<0)

low=mid+1;

elseif(cmp>0)

high=mid-1;

else

returnmid;//keyfound

}

return-(low+1);//keynotfound.

}

算法思想描述:

查找的数组必须是按关键字值排好序;减半查找范围,确定待查元素是否存在于数组中。

1、获取中间元素的位置,拿带查元素与中间位置元素比较;

2、比中间元素大,在后半部分找;

3、比中间元素小,在前半部分找。

注意问题:

✓sort()的使用

✓binarySearch()的使用

✓数组与Arrays类的区别

练习:

请参见读程序写结果中——程序1、程序2、程序3

2List、ArrayList

学习目标:

1.掌握ArrayList的具体使用2.掌握List接口的实现

ArrayList是一种线性表,在内存中是连续存储的,适合于元素的随机存取。

添加和删除操作是需要依据添加的位置来定,如果在ArrayList最后元素后面添加和删除元素,在性能方面还算好,但是如果是在ArrayList中间添加和删除元素的话,代价就会很大。

1.ArrayList结构特点:

数组大小固定,ArrayList可以自动增加空间

ArrayList常用方法:

size()返回此列表中的元素数。

get()返回此列表中指定位置上的元素。

set()用指定的元素替代此列表中指定位置上的元素。

add()将指定的元素添加到此列表的尾部;将指定的元素插入此列表中的指定位置。

contains()如果此列表中包含指定的元素,则返回true。

remove()移除此列表中指定位置上的元素。

Object[]toArray()按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。

3.遍历方法

①for循环语句:

for(inti=0;i<…;i++)

②迭代器:

Iteratorit=list.iterator();

while(it.hasNext())

{Ee=it.next();…}

③forEach结构:

for(Ee:

list){…}

4.了解ArrayList与Vector的区别

5.List接口的实现

6.继承关系如下图:

1.List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。

2.List接口与其常用实现类的继承实现关系:

3.对比List接口的两个常用实现类

简述

实现

操作特性

成员要求

List

提供基于索引的对成员的随机访问

ArrayList

提供快速的基于索引的成员访问,对尾部成员的增加和删除支持较好

成员可为任意

Object子类的对象

LinkedList

对列表中任何位置的成员的增加和删除支持较好,但对基于索引的成员访问支持性能较差

成员可为任意

Object子类的对象

1、上机实现下面程序

publicstaticvoidmain(String[]args)

{

Listlist=newArrayList();

for(inti=0;i<5;i++){

list.add("编程词典"+i);

}

ListIteratorli=list.listIterator();

while(li.hasNext()){

System.out.println(li.next());

}

}

1、练习:

请参见读程序写结果中——程序4、程序5

2、创建一个类Cat:

包含属性name,在构造方法中进行初始化;添加一个方法show(),用以打印name属性的值

创建一个类CatTest:

添加main方法,实现创建一个ArrayList,向其中添加几个Cat对象遍历该集合,并且对每个Cat对象调用show()方法

参考代码:

classCat{

privateStringname;

publicCat(Stringname){

this.name=name;

}

publicvoidshow(){

System.out.println(name);

}

}

publicclassCatTest{

publicstaticvoidmain(String[]args){//创建一个ArrayList,向其中添加几个Cat对象;

ArrayListlist=newArrayList();

list.add(newCat("mimi"));list.add(newCat("qiqi"));

list.add(newCat("ding"));//遍历该集合,并且对每个Cat对象调用show()方法。

for(inti=0;i

Catc=(Cat)list.get(i);c.show();}}}

3LinkedList

学习目标:

1.掌握LinkedList类的使用方法2.掌握栈和队列的概念

1.结点、链表的概念以及链式存储的思想

2.LinkedList类的常用方法(对比ArrayList)的掌握

3.与ArrayList类比较,各自特点,如何应用、选择

LinkedList的常用方法:

add()向链表末尾添加一个新的节点

remove()删除指定位置上的节点;删除首次出现含有数据elemen的节点。

get()得到链表中指定位置处节点中的对象。

set()将当前链表index位置结点中的对象替换为参数element指定的对象,并返回被替换的对象。

4.用LinkList类实现栈和队列栈中常用方法:

pop()从此列表所表示的堆栈处弹出一个元素。

push()将元素推入此列表所表示的堆栈。

新增以下新方法:

构造方法LinkedList()

getFirst()和getLast()

removeFirst()和removeLast()

addFirst()和addLast()

5、类继承关系如图:

List接口实现:

1.LinkedList是采用双向循环链表实现的。

2.利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-endedqueue)

采用链表的方法来实现栈:

用方法addFirst(Objectelement)实现进栈操作。

用方法removeFirst()实现出栈。

用方法getFirst()实现栈顶数据查询。

用方法isEmpty()实现栈是否为空。

练习:

请参见读程序写结果中——程序6、程序7、程序7

上机操作:

创建一个类Stack,代表堆栈(其特点为:

后进先出),添加方法add(Objectobj)、以及delete(),添加main方法进行验证,要求:

☐使用LinkedList实现堆栈

☐在向LinkedList中添加时,使用addLast()方法

☐在从LinkedList中取出时,使用removeLast()方法

4Collections与Collection

学习目标:

1.会使用Collections类2.掌握Collection接口

1.了解Collection接口

2.掌握Collection接口常用方法

3.掌握Collections类中常用方法

Collection接口中常用方法:

toArray() 返回包含此collection中所有元素的数组。

add() 确保此collection包含指定的元素。

equals() 比较此collection与指定对象是否相等。

hashCode() 返回此collection的哈希码值。

size()  返回此collection中的元素数。

iterator()返回调用类集的迭代程序

remove()从调用类集中删除obj的一个实例。

如果这个元素被删除了,则返回true;否则返回false

4.Comparable与Comparator

的区别联系

5、Collections类的继承关系:

Collections类中常用方法:

binarySearch()使用二分搜索法搜索指定列表,以获得指定对象。

sort()   根据元素的自然顺序对指定列表按升序进行排序。

synchronizedMap()  返回由指定映射支持的同步(线程安全的)映射。

synchronizedSet() 返回指定set支持的同步(线程安全的)set。

sort()、reverse()、max()、min()、fill()等方法

6、Collection接口的继承关系:

1.Collections中的大多数方法都与List或collection有关。

1.Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。

一些Collection允许相同的元素而另一些不行。

一些能排序而另一些不行。

JavaSDK不提供直接继承自Collection的类,JavaSDK提供的类都是继承自Collection的“子接口”如List和Set。

2.Collections类完全由在collection上进行操作或返回collection的静态方法组成。

它包含在collection上操作的多态算法,即“包装器”,包装器返回由指定collection支持的新collection,以及少数其他内容。

2、Collection的遍历:

Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代器,使用该迭代器即可逐一访问Collection中每一个元素。

借助Iterator接口实现。

Iterator接口结构:

模板代码:

Iteratorit=collection.iterator();//获得一个迭代器

while(it.hasNext()){

Objectobj=it.next();//得到下一个元素

  }

利用Collection接口的iterator()获得一个实现了Iterator接口的迭代器,然后利用其完成Collection接口对象的遍历操作。

模板代码如右所示:

对象排序方法:

1、Comparable接口

所有可以”排序“的类都实现了java.lang.Comparable接口

Comparable接口中只有一个方法:

publicintcompareTo(Objectobj);

2、Comparator接口

Comparator通常在对于自然排序不能满足需要时使用。

Comparator接口定义了两个方法:

compare( )和equals( )。

publicinterfaceComparator{

intcompare(To1,To2);

booleanequals(Objectobj);

}

练习:

请参见读程序写结果中——程序9(Collections)

练习:

请参见读程序写结果中——程序10(Collections、Iterator接口)

练习:

请参见读程序写结果中——程序11(Comparator接口)

5Set与HashSet

学习目标:

1.掌握Set接口常用方法2.掌握HashSet的特点及学会使用HashSet类3.了解其它的Set接口实现类

1、Set接口:

扩展了Collection接口,Set接口是Collection接口的子接口,不包含重复元素。

它采用所有原始方法,并且未引入任何新方法。

继承关系如下图:

Set接口定义:

publicinterfaceSetextendsCollection{

……//接口定义请参照API帮助文档

}

Set接口中的常用方法:

2、Set接口提供了两种通用实现:

HashSet和TreeSet

HashSet,采用散列函数对元素进行排序,这是专门为快速查询而设计的;来存储不重复的集合。

TreeSet,当需要以一种排序的方式从集合中提取元素的时候使用。

为了正确运行,添加到TreeSet中的元素必须是可排序的。

采用二叉树的数据结构进行排序元素。

3、HashSet类定义:

是Set接口最常用的实现之一,存入HashSet的对象必须定义hashCode(),其元素在其中存储不保证任何顺序。

实际上,HashSet存储对象引用时是按照哈希策略来实现的。

publicclassHashSetextendsAbstractSet

implementsSet,Cloneable,java.io.Serializable{

……//具体方法实现参考API帮助文档

}

HashSet类常用方法:

HashSet类继承关系:

 

HashSet类的几个构造器:

publicHashSet():

该构造器将构造一个空的HashSet对象。

该对象的初始容量为16。

publicHashSet(intinitalCapacity):

参数initalCapacity表示指定的初始容量,该构造器将构造一个具有指定容量的空HashSet对象。

publicHashSet(Collectionc):

参数c为包含指定元素的Collection。

该构造器将构造一个以c中的元素为初始内容的HashSet对象。

4、TreeSet类定义:

实现了SortedSet接口,此类保证排序后的Set按照升序排列元素,底层为树结构。

使用它可以从Set中提取有序的序列。

publicclassTreeSetextendsAbstractSet

implementsNavigableSet,Cloneable,java.io.Serializable

{……}

TreeSet类继承关系:

TreeSet类中常用方法见右图:

1.Set中的几个重要方法:

equals()、contains()、hashCode()

2.Set接口中元素具有唯一性,改写equals()方法。

Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。

3.HashSet散列(hash),特点:

查找的高效率(例如两个集合相交),改写hashCode()方法

分析:

HashSet要求放入的对象必须实现hashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。

但是同一个类的对象可以放入不同的实例。

4.了解其它的Set相关类:

LinkedHashSet

随堂练习:

1、分析程序,写出结果

importjava.util.Collection;

importjava.util.HashSet;

importjava.util.Iterator;

publicclassSetTest2{

publicstaticvoidmain(String[]args){

Collectionc;

c=newHashSet();

c.add("1");

c.add("3");

c.add("2");

Iteratorit=c.iterator();

while(it.hasNext()){

System.out.println(it.next());//返回集合元素

}

}

}

 

2、分析程序,写出结果

importjava.util.*;

publicclassHashSetTest{

publicstaticvoidmain(String[]args){

HashSetset=newHashSet();

set.add("1st");

set.add("2nd");

set.add("3rd");

set.add(newString("Four"));

set.add(newInteger(6));

set.add(“2nd”);//重复的元素没有被加入

System.out.println(set);//元素的顺序与加入的顺序没有关系

}

}

 

练习:

请参见读程序写结果中——程序12(Arrays和HashSet)

练习:

请参见读程序写结果中——程序13(TreeSet和SortedSet)

6Map与HashMap

学习目标:

1.掌握Map接口的使用2.掌握HashMap类的应用

1、Map接口:

将键映射到值的对象。

一个映射不能包含重复的键;每个键最多只能映射到一个值。

Map看起来比较像由映射组成的Set。

Map接口不是Collection接口的继承。

定义:

publicinterfaceMap

{

……//具体方法请查看API帮助文档

}

继承关系:

Map接口中常见方法:

其中重要方法:

get()、put()、equals()、hashCode()、keySet()、values()、containsKey()、containsValue()

2、Map接口的可用实现类主要有:

HashMap,TreeMap,Hashtable,Properties

其中:

Hashtable,Properties是JDK1.0/1.1中的。

①HashMap对key进行散列。

HashMap通过哈希码对其内部的映射关系进行快速查找。

②TreeMap按照key进行排序。

TreeMap中的映射关系存在一定的顺序,如果希望在遍历集合时是有序的,则应该使用由TreeMap类实现的Map集合,否则建议使用由HashMap类实现的Map集合,因为由HashMap类实现的Map集合对于添加和删除映射关系更高效。

3、Map接口提供三种collection视图

允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。

允许以三种方法将映射视作集合。

如下表:

keySet是映射中包含的键集

Setkeys=map.keySet();

values是映射中的值的集合

Collectionsvalues=map.values();

entrySet是包含在映射中的键-值对的集

Setkvs=map.entrySet();

4、HashMap类定义:

HashMap类实现了Map接口

publicclassHashMap

extendsAbstractMap

implementsMap,Cloneable,Serializable{

……//具体方法请查看API帮助文档

}

继承关系:

HashMap类常见方法见右图:

其中重要的方法有:

get()、put()、equals()、hashCode()、keySet()、values()、containsKey()、containsValue()

HashMap的常用方法:

5、HashMap类说明:

①由HashMap类实现的Map集合,允许以null作为键对象,但是因为键对象不可以重复,所以这样的键对象只能有一个。

如果经常需要添加、删除和定位映射关系,建议利用HashMap类实现Map集合,不过在遍历集合时,得到的映射关系是无序的。

②在使用由HashMap类实现的Map集合时,需要重写作为主键对象类的hashCode()方法

重写hashCode()方法时,有以下两条基本原则:

(1)不唯一原则:

不必为每个对象生成一个唯一的哈希码,只要通过hashCode方法生成的哈希码能够利用get()方法得到利用put()方法添加的映射关系就可以。

(2)分散原则:

生成哈希码的算法应尽量使哈希码的值分散一些,不要很多哈希码值都集中在一个范围内,这样有利于提高由HashMap类实现的Map集合的性能。

6、遍历HashMap的方法:

//遍历方法1

for(Iteratoriter=map.keySet().iterator();iter.hasNext();)

System.out.println(iter.next());

//遍历方法2

Iteratoriter=map.keySet().iterator();

while(iter.hasNext()){

System.out.println(iter.next());

}

7、TreeMap类定义:

TreeMap类不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap。

支持对键有序地遍历,使用时建议先用HashMap增加和删除成员,最后从HashMap生成TreeMap。

publicclassTreeMap

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1