JAVA数据结构

Java的数据结构和算法 今天我们来简单介绍一下Java的数据结构和算法。 一、数据结构 1、数据结构的分类 2、数据结构的基本功能 二、算法 1、算法是什么 2、算法的特点 一、1、数据结构是计算机组织、存储数据的方式。简单来说就是,数据按指定的规则进行存储,从而得到一个有固定存储格式的数据集合,就称之为“数据结构” 数据结构又分为:①数组 (Array) ②栈 (Stack) ③队列 (Queue) ④链表 (Linked ... 阅读详情
JAVA数据结构

线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。

 

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

 

Collection接口

  Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

  所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。

  如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:

    Iterator it = collection.iterator(); // 获得一个迭代子

    while(it.hasNext()) {

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

    }

  由Collection接口派生的两个接口是List和Set。

主要方法:

boolean add(Object o)添加对象到集合

boolean remove(Object o)删除指定的对象

int size()返回当前集合中元素的数量

boolean contains(Object o)查找集合中是否有指定的对象

boolean isEmpty()判断集合是否为空

Iterator iterator()返回一个迭代器

boolean containsAll(Collection c)查找集合中是否有集合c中的元素

boolean addAll(Collection c)将集合c中所有的元素添加给该集合

void clear()删除集合中所有元素

void removeAll(Collection c)从集合中删除c集合中也有的元素

void retainAll(Collection c)从集合中删除集合c中不包含的元素

 

List接口

  List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。

和下面要提到的Set不同,List允许有相同的元素。

  除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。

  实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

主要方法:

void add(int index,Object element)在指定位置上添加一个对象

boolean addAll(int index,Collection c)将集合c的元素添加到指定的位置

Object get(int index)返回List中指定位置的元素

int indexOf(Object o)返回第一个出现元素o的位置.

Object removeint(int index)删除指定位置的元素

Object set(int index,Object element)用元素element取代位置index上的元素,返回被取代的元素

 

LinkedList类

  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

  注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:

    List list = Collections.synchronizedList(new LinkedList(...));

 

ArrayList类

  ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。

size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。

  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

主要方法:

Boolean add(Object o)将指定元素添加到列表的末尾

Boolean add(int index,Object element)在列表中指定位置加入指定元素

Boolean addAll(Collection c)将指定集合添加到列表末尾

Boolean addAll(int index,Collection c)在列表中指定位置加入指定集合

Boolean clear()删除列表中所有元素

Boolean clone()返回该列表实例的一个拷贝

Boolean contains(Object o)判断列表中是否包含元素

Boolean ensureCapacity(int m)增加列表的容量,如果必须,该列表能够容纳m个元素

Object get(int index)返回列表中指定位置的元素

Int indexOf(Object elem)在列表中查找指定元素的下标

Int size()返回当前列表的元素个数

 

Vector类

  Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

 

Stack 类

  Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

 

Set接口

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

  很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

  请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

 

Map接口

  请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

主要方法:

boolean equals(Object o)比较对象

boolean remove(Object o)删除一个对象

put(Object key,Object value)添加key和value

Hashtable类

  Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。

  添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。

Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。

使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是”one”,”two”,”three”:

    Hashtable numbers = new Hashtable();

    numbers.put(“one”, new Integer(1));

    numbers.put(“two”, new Integer(2));

    numbers.put(“three”, new Integer(3));

  要取出一个数,比如2,用相应的key:

    Integer n = (Integer)numbers.get(“two”);

    System.out.println(“two = ” + n);

  由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。

  如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。

  Hashtable是同步的。

 

HashMap类

  HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。

 

WeakHashMap类

  WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

 

总结

  如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

  如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。

  要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。

  尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

Java语言的数据结构 本文详细介绍了Java语言中常用的数据结构,包括数组、链表、栈、队列、树和图。每种数据结构都有其特点和适用场景,理解并掌握这些数据结构对于编写高效的程序至关重要。在实际开发中,选择合适的数据结构可以显著提升程序的性能和效率。希望本篇文章能够帮助读者更好地理解和运用Java中的数据结构。 阅读详情

相关推荐

Office如何通过VSTO进行WORD插件开发?

VSTO(Visual Studio Tools for Office )是VBA的替代,是一套用于创建自定义Office应用程序的Visual Studio工具包。VSTO可以用Visual Basic 或者Visual C#扩展Office应用程序(例如Word、Excel、PPT)。本文通过VSTO进行Word插件开发总结,并进行记录。

【cacrle】的博客 7321

JAVA数据结构和算法

JAVA数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。  Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└Set

静心编程-java-php-jsp-数据库-网站-我们一起成长 886

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly

2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。

weixin_42968584的博客 1127

学 Java 有必要看数据结构的书吗?如果是,那么哪本书比较好?

自己已经学过数据结构与算法了,但是感觉学校的课本讲得太少,而且不全面,并且老师也是一带而过,但是在后面自学的过程中越来越觉得数据结构与算法越来越重要,因为我是从 C -> c++ -> java 这样入门的,当我学到Java的时候前面C和C++的语法除了一些基本的语法以外都很模糊了,但是数据结构的思想基本没怎么改变,而且对我后面学习java起到了很大的帮助,提升了我学习java的速度,因而觉得数据

Leonidas_Li的博客 1万+

国产麒麟系统PXE安装-UEFI引导

注意: 适用uefi引导 适用x86_64架构 一键部署脚本扣我 1.上传ISO到PXE服务器,拷贝ISO文件 # mkdir /kylin_iso # mount -o loop Kylin-Server-10-SP1-Release-Build04-20200711-x86_64.iso /kylin_iso/ 2.配置http,获取安装源 # yum -y install httpd # mkdir /var/www/html/{ks,kylin} # 注意一定是"/kylin_iso/

河静 5056

WIFI信号状态信息 CSI 特征提取篇之活动片段提取(五)

本环节是特征提取环节,起承上启下的作用:对上,应着数据处理完毕的信号,但是还不能直接进行分析,因为此时信号片段过长,对于活动识别而言,存在非许多目标片段(例如失败不规范的动作、休息间歇等);对下,具体采取何种活动片段提取策略,需要配合后续采取的活动识别算法进行(深度学习/机器学习,CNN/RNN/LSTM等等),不同的算法适配不同的数据形式,例如CNN一般用于识图,不需要关注时间顺序,LSTM则要求保留时间关系等等,所以本博客后续仅介绍几种分类思路。

Silver_777的博客 4540

数据结构———集合

集合 :就是包含着不同元素的数据结构,即在集合结构中,每个元素都是独一无二的。互不相同,同同时所有数据都是无序的。

STONE的博客 1497

个人信息保护合规审计人员(中级)能力测试试卷

本文是关于个人信息保护合规考试的试题解析,内容涵盖《个人信息保护法》相关规定。试卷包含单选题、多选题、判断题、简答题和案例分析题五种题型,总分100分,考试时间120分钟。试题重点考察个人信息处理的基本原则、敏感个人信息处理要求、合规审计流程、个人信息保护影响评估等内容。通过案例分析题详细解析了人脸识别登录、数据共享、跨境传输等场景下的合规要求。参考答案均严格依据《个人信息保护法》等法律法规,为个人信息处理活动提供了明确的合规指引。

qq_41525079的博客 853

数据结构中的集合

介绍 几乎每种编程语言中,都有集合结构。 集合是由一组无序但彼此之间又有一定相关性的成员构成的, 每个成员在集合中只能出现一次。 集合是特殊的数组,特殊之处在于: 里面的元素没有顺序,也不能重复。 没有顺序意味着不能通过下标值进行访问,不能重复意味着相同的对象在集合中只会存在一个。 集合间的操作 1、并集 对于给定的两个集合,返回一个包含两个集合中所有元素的新集合。 2、交集 对于给定的两个集合,返回一个包含两个集合中共有元素的新集合。 3、交集 对于给定的两个集合,返回一个包含所有存在于第一个集合

jiangjunyuan168的博客 1489

Windows显卡TDR超时导致Unity崩溃?手把手教你修改注册表延长响应时间

本文详细解析了Windows显卡TDR超时导致Unity崩溃的问题,并提供了修改注册表延长响应时间的完整解决方案。通过调整TdrDelay和TdrDdiDelay键值,开发者可以有效避免D3D11设备丢失错误,提升Unity编辑器的稳定性。文章还包含显卡驱动优化、系统性能调优等实用技巧,帮助开发者彻底解决编辑器崩溃问题。

weixin_33737774的博客 623

【PINN物理信息网络】基于PINN物理信息网络求解泊松方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解泊松方程(python)

k8291121的博客 2812

JAVA数据结构——图

图: 与线性结构和树形结构相比,图是一种更为复杂的数据结构,因为复杂所以也更好玩。在线性数据结构中,元素只能和他的前驱或者后继有关;在树形结构中,元素只能和其父节点或者子节点有关;然而图,他可以跟其他任意一个元素相关,这也就是图的魅力所在。 图的应用: 那么我们学图有什么用?我们在离散数学和数据结构中都接触了图的概念,但是图在生活中应用在那边呢?图的应用处于我们生活的处处面面,如:我们去超市...

qq_37857921的博客 2277

静态时序分析—set_sense

set_sense 常见用法

m0_61544122的博客 1万+

Java数据结构与算法入门

第一部分:Java数据结构要理解Java数据结构,必须能清楚何为数据结构?数据结构:Data_Structure,它是储存数据的一种结构体,在此结构中储存一些数据,而这些数据之间有一定的关系。而各数据元素之间的相互关系,又包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。而一个数据结构的设计过程分成抽象层、数据结构层和实现层。数据结构在Java的语言体系中按逻辑结构可以分为两大类:线...

qq_37101453的博客 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java 中几种常用数据结构

JAVA中常用的数据结构(java.util. 中) java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。其主要的关系(继承关系)有:  (----详细参见java api文档!) Collection---->Collections

u010947402的博客 13万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java 数据结构

Java 提供了丰富的数据结构来处理和组织数据。Java 的 java.util 包中提供了许多这些数据结构的实现,可以根据需要选择合适的类。

hyc2005的博客 1111

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java数据结构详解

本文全面介绍了Java中的数据结构,从基础概念到实际应用。内容涵盖线性结构(数组、链表、栈、队列)和非线性结构(树、图、哈希表),详细讲解了Java集合框架的实现与使用场景。通过代码示例展示了各种数据结构的实现方式,包括自定义实现和Java内置类库(如ArrayList、LinkedList)的使用。文章还分析了不同数据结构的性能特点,并提供了实际应用场景中的选择建议。最后总结了数据结构学习的关键点,帮助开发者掌握这一核心技能以编写高效代码。

2403_88265297的博客 1222

java中常见数据结构

java中常见的数据结构

gengpengfeiazxl的博客 5179

Java数据结构

数据结构是计算机存储组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

weixin_43875870的博客 2068

Java中常见的数据结构

Java 中常用的数据结构

Deikey的博客 6541

Java 数据结构集合

队列的头部是队列中时间最长的元素。为了降低这部分的开销,在 Java8 中,当链表中的元素达到了 8 个时,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。计算 key 的 hash 值,根据 hash 值找到对应数组下标: hash & (length-1)判断数组该位置处的元素是否刚好就是我们要找的,如果不是,走第三步判断该元素类型是否是 TreeNode,如果是,用红黑树的方法取数据,如果不是,走第四步遍历链表,直到找到相等(==或equals)的 key。

Artisan_w 1540

java 数据结构_Java数据结构学习方法

Java数据结构  要理解Java数据结构,必须能清楚何为数据结构?  数据结构:  Data_Structure,它是储存数据的一种结构体,在此结构中储存一些数据,而这些数据之间有一定的关系。  而各数据元素之间的相互关系,又包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。  而一个数据结构的设计过程分成抽象层、数据结构层和实现层。  数据结构在Java的语言体系中按逻辑结构可以...

weixin_39645343的博客 190

java之数据结构

文章目录数据结构1.概念2.java中数据结构的架构3.java数据结构相关的类和接口4.Set集合: 数据结构 1.概念 数据结构分类: 线性数据结构: 数组,文件,线性表,栈...... 非线性数据结构: 散列表,树和图 2.java中数据结构的架构 Collection接口: ---List<E> --------ArrayList --------LinkedList --...

w03082429的博客 206

Java 中常见的数据结构

Java 集合框架提供了丰富的数据结构实现,以下我会介绍几种最常用的数据结构及其特性

2301_79446157的博客 1546

Java 数据结构深度解析

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。这些数据元素可以是基本数据类型(如整型、浮点型)或复合数据类型(如类、结构体)。数据结构的选择直接影响程序的运行效率、内存占用及代码的可维护性。数据结构是编程中的核心概念,深入理解并掌握 Java 中的数据结构,对于提升程序的性能、可读性和可维护性至关重要。通过 Java 集合框架,开发者可以方便地使用各种高效的数据结构,从而专注于业务逻辑的实现。希望本文能帮助读者更好地理解和应用 Java 中的数据结构,为编写高质量的代码打下坚实的基础。

2403_86822198的博客 624

java有哪些数据结构_java数据结构有哪些

描述java数据结构有哪些1、ListList是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 》标)来访问List中的元素,这类似于Java的数组。2、Vector基于数组(Array)的List,其实就是封装了数组所不具备的一些功能方便我们使用,所以它难易避免数组的限制,同时性能也不可能超越数组。另外很重要的一点就...

weixin_36459720的博客 667
上一篇: android 检查GPS是否开启,GPS设置界面
下一篇: ImageView的属性android:scaleType
恶魔果实
博客等级 码龄15年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值