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

java入门基础—常用类与数据结构精讲(通俗易懂版)

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

学习java必须知道的常用类

java的包装类

java并不是纯面向对象的语言,java语言是一个面向对象的语言,但是java中的基本数据类型却不是面向对象的,但是我们在实际使用中经常将基本数据类型转换成对象,便于操作,比如,集合的操作中,这时,我们就需要将基本类型数据转化成对象!

基本类型及对应的包装类

包装类的继承关系

包装类的继承关系

包装类主要提供了两类转换方法,看下面的代码:

第一行是用基本类型定义了整型变量i,第二行是利用int包装类定义了int对象m,虽然赋值为整型的5,但是现在会将基本类型转换为包装类中的5

第三行初始化值为字符串类型的"8",但是会被包装类转换成整数类型,这就是包装类的基本使用方法

每个包装类都可以和其他类进行转换,比如Integer包装类,转换的对应关系如下:

下面写个实例

我们通过这个实例可以看出,包装类转换为基本数据类型是很方便的~

那么基本类型怎么转换为包装类的对象呢?其实前面三行代码已经体现了,只不过不太完全,基本类型转换为包装类可以理解为一个装箱的过程,装箱有两种方式:手动装箱和自动装箱,那么同理包装类转换为基本类型叫做拆箱,同样分为:手动拆箱和自动拆箱,上面的例子就是一个手动拆箱的例子~

那么其中自动装箱和自动拆箱,都是编译器根据数据类型自动完成了转换,简单的代码如下:

可以看到,对每一个数据类型分别完成了自动和手动两个操作,所以b和c的值是一样的,e和f的值是一样的

除了基本数据类型的包装转换之外,基本类型和字符串之间也可以进行转换

比如一个基本类型:int a = 30;有3中方式转换为字符串对象:

  1、使用包装类的toString方法,String str1 = Integer.toString(a);

  2、使用String类的valueOf方法,String str2 = String.valueOf(a);

  3、用一个空字符串加上基本类型,系统会将基本类型转换为字符串类型,String str3 = a                 + "";

反过来,定义:String str = "18";将一个字符串类型转换为基本类型有以下两种方法:

  1、调用包装类的parseXxx静态方法,int b = Integer.parseInt(str);

  2、调用包装类的valueOf方法,完成自动拆箱,int c = Integer.valueOf(str);

其他类型转换也是一样,替换里面的类型即可,再看下面的例子:

这个例子实现了两次转换,所以str1+20应该输出:78.520,a+20应该输出:200.20,前者结果是字符串类型,后者结果是基本的浮点数类型。

更多关于常用类的详细讲解,请看视频教程:

java中的数据结构

java中常用的数据结构,看下图


数组

数组是相同数据类型的元素按一定顺序排列的集合,是一块连续的内存空间。数组的优点是:get和set操作时间上都是O(1)的;缺点是:add和remove操作时间上都是O(N)的。

Java中,Array就是数组,此外,ArrayList使用了数组Array作为其实现基础,它和一般的Array相比,最大的好处是,我们在添加元素时不必考虑越界,元素超出数组容量时,它会自动扩张保证容量。

Vector和ArrayList相比,主要差别就在于多了一个线程安全性,但是效率比较低下。如今java.util.concurrent包提供了许多线程安全的集合类(比如 LinkedBlockingQueue),所以不必再使用Vector了。

链表

链表是一种非连续、非顺序的结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,链表由一系列结点组成。链表的优点是:add和remove操作时间上都是O(1)的;缺点是:get和set操作时间上都是O(N)的,而且需要额外的空间存储指向其他数据地址的项。

查找操作对于未排序的数组和链表时间上都是O(N)。

Java中,LinkedList 使用链表作为其基础实现。


队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,亦即所谓的先进先出(FIFO)。

Java中,LinkedList实现了Deque,可以做为双向队列(自然也可以用作单向队列)。另外PriorityQueue实现了带优先级的队列,亦即队列的每一个元素都有优先级,且元素按照优先级排序。

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。它体现了后进先出(LIFO)的特点。

Java中,Stack实现了这种特性,但是Stack也继承了Vector,所以具有线程安全线和效率低下两个特性,最新的JDK8中,推荐用Deque来实现栈,比如:


集合

集合是指具有某种特定性质的具体的或抽象的对象汇总成的集体,这些对象称为该集合的元素,其主要特性是元素不可重复。

在Java中,HashSet体现了这种数据结构,而HashSet是在MashMap的基础上构建的。LinkedHashSet继承了HashSet,使用HashCode确定在集合中的位置,使用链表的方式确定位置,所以有顺序。TreeSet实现了SortedSet 接口,是排好序的集合(在TreeMap 基础之上构建),因此查找操作比普通的Hashset要快(log(N));插入操作要慢(log(N)),因为要维护有序。

散列表

散列表也叫哈希表,是根据关键键值(Keyvalue)进行访问的数据结构,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数。

Java中HashMap实现了散列表,而Hashtable比它多了一个线程安全性,但是由于使用了全局锁导致其性能较低,所以现在一般用ConcurrentHashMap来实现线程安全的HashMap(类似的,以上的数据结构在最新的java.util.concurrent的包中几乎都有对应的高性能的线程安全的类)。TreeMap实现SortMap接口,能够把它保存的记录按照键排序。LinkedHashMap保留了元素插入的顺序。WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收,而不需要我们手动删除。

这里简单介绍下集中java常用的数据结构,如有疑问的请移步视频课程


如有需要课件和源码的小伙伴可以留言或私信UP!

别忘了点赞关注支持哦!




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