首页 > 编程语言 >Java基础

Java基础

时间:2024-06-20 20:57:45浏览次数:25  
标签:Java ArrayList 基础 value 线程 数组 集合 方法

1.Hashcode的作用

Java的集合有两类,一类是List,还有一类是Set。前者有序可重复,后者无序不可重复。当我们在Set中添加元素的时候,怎么判断集合中是否存在该元素,我们可以用equals方法来判断,但是当元素很多的时候,这种方法显然就很慢了。

于是有人发明哈希算法来提高集合中查找元素的效率。这种方式将集合分成多个存储区域,每一个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据对象的哈希码就可以确定该对象应该存储的那个区域。

hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算的一个值。这样一来,每当集合添加新的元素的时候,先调用这个元素的hashCode方法,就一下能定位到它应该放置的物理位置。如果位置上没有任何元素,就可以直接放置该位置,不需要任何比较;如果这个位置有元素,那就调用equals方法与新元素进行比较,相同的话就不存了,不相同就散列其他的地址。这样一来调用equals方法就大大降低了,几乎只需要一两次。

2.String、String StringBuffer 和 StringBuilder 的区别是什么? 

String是只读字符串,它并不是基础数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法进行增删改。每次对String的操作都会生成新的String对象。

private final char value[];

每次+操作:隐式在堆上new了一个与原字符相同的StringBuilder对象,在调用append方法将原字符和+后面的字符拼接。

StringBuffer和StringBuilder他们两都继承了AbstractStringBuilder抽象类,从 AbstractStringBuilder抽象类中我们可以看到

/**
* The value is used for character storage.
*/
char[] value;

他们的底层都是可变字符数组,以后进行频繁的字符串操作时,建议使用StringBuffer和StringBuilder来进行操作。另外StringBuffer堆方法同步锁或对调用的方法加了同步锁,所以是线程安全的。而StringBuilder对方法没有加同步锁,所以是非线程安全的。

3.ArrayList和linkedList的区别?

Array(数组)是基于索引(Index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。

Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有 数据, (因为删除数据以后, 需要把后面所有的数据前移)

缺点: 数组初始化必须指定初始化的长度, 否则报错

例如:

int[] a = new int[4];//推介使用int[] 这种方式初始化

int c[] = {23,43,56,78};//长度:4,索引范围:[0,3]

List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,他继承Collection。

List有两个重要的实现类:ArrayList和LinkedList

ArrayList:可以看作是能够自动增长容量的数组。

ArrayList的toArray方法是返回一个数组

ArrayLIst的asList方法返回一个列表

ArrayList底层的实现是Array,数组扩容实现。

LinkedList是一个双链表,在添加删除元素时具有比ArrayList更好的性能,但在getset方面弱于ArrayList。当然,这些对比都是指数据量很大或者操作很频繁。

4.HashMap和HashTable的区别

1.两者父类不同

HashMap是继承AbstractMap类,而HashTable是继承自Dictionary类。不过他们都实现了map,Cloneable(可复制),Serializable(可序列化)这三个接口。

2.对外提供的接口不同

Hashtable比HashMap多提供了elments() 和contains() 两个方法。 elments() 方法继承自 Hashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举。

contains()方法判断该Hashtable是否包含传入的value。它的作用与containsValue()一致。事实 上,contansValue() 就只是调用了一下contains() 方法。

3、对null的支持不同

HashTable:key和value都不能为null。

HashMap:key可以为null,但是为了保证key的唯一性,只能有一个key为null;可以有多个key对应的value为null。

4.安全性不同

HashMap是线程不安全的,在多线程并发的环境下,可能会产生死锁等问题,因此需要开发人员自己处理多线程的安全问题。

HashTable是线程安全的,它的每个方法上都有synchronized 关键字,因此可直接用于多线程中。

虽然HashMap是线程不安全的,但是比HashTable的效率要高很多,这样设计是合理的,因为大部分的使用场景都是单线程的。当需要多线程操作的时候可以使用线程安全ConcurrentHashMap。

ConcurrentHashMap虽然也是线程安全的,但是它的效率比Hashtable要高好多倍。因为 ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定。

5.初始容量大小和每次扩充容量大小不同
6.计算hash值的方法不同

5.Collection包结构,与Collections的区别?

Collection是集合类的上级接口,子接口有 Set、List、LinkedList、ArrayList、Vector、Stack、 Set;

Collections是集合类的一个帮助类, 它包含有各种有关集合操作的静态多态方法,用于实现对各种 集合的搜索、排序、线程安全化等操作。此类不能实例化,就像一个工具类,服务于Java的 Collection框架。

标签:Java,ArrayList,基础,value,线程,数组,集合,方法
From: https://blog.csdn.net/2302_81614773/article/details/139841452

相关文章

  • java的CC1链分析与利用
    CC1链子分析CommonsCollections简介ApacheCommonsCollections是一个扩展了Java标准库里的Collection结构的第三方基础库,它提供了很多强有力的数据结构类型并实现了各种集合工具类。作为Apache开源项目的重要组件,被广泛运用于各种Java应用的开发。环境配置jdk版本:jdk8......
  • 重学java 79.JDK新特性 ⑤ JDK8之后的新特性
    别怕失败,大不了重头再来                          ——24.6.20一、接口的私有方法Java8版本接口增加了两类成员:        公共的默认方法        公共的静态方法Java9版本接口又新增了一类成员:......
  • java多线程
    目录多线程的实现方式多线程的第一种实现方式 继承Thread类的方式进行实现多线程的第二种实现方式 实现Runnable接口的方式进行实现利用Callable接口和Future接口方式实现 多线程中常用的成员方法 StringgetName()                返回此线程的名......
  • Java学习基础笔记——多线程基础部分
    第十三章多线程基础13.1线程介绍13.1.1线程相关概念13.2线程创建13.2.1创建线程的两种方式13.2.2继承Threadvs实现Runnable的区别13.2.3线程终止13.3线程方法13.3.1常用方法第一组13.3.2常用方法第二组13.3.3用户线程和守护线程13.4Synchronized13......
  • Java学习基础笔记——反射机制
    第十五章反射15.1反射机制15.1.1 Java反射机制可以完成15.1.2 反射的优缺点15.2Class类15.2.1基本介绍15.2.2Class类常用方法15.2.3获取Class类对象6种方式15.3类加载15.3.1基本说明15.3.2类加载时机15.4反射获取类的结构信息15.5反射调用性能......
  • Python基础-类与对象
    1.面向对象的三大特性封装继承多态2.类与对象的理解与封装特性类是事物抽象的集合,对象是事物具象的个体。(类–>实例化–>对象)面向对象编程语言类:一个模板,(人类)—是一个抽象的,没有实体的对象:(eg:张三,李四)属性:(表示这类东西的特征,眼睛,嘴巴,鼻子)方法:(......
  • Java毕业设计 基于springboot vue音乐网站
    Java毕业设计基于springbootvue音乐网站SpringBoot音乐网站功能介绍首页图片轮播歌曲信息歌曲分类歌曲详情歌曲播放音乐下载评论注册登录个人中心更新信息用户后台:登录个人中心修改密码个人信息音乐下载管理员:登录个人中心修改密码个人信息用户管......
  • python基础语法
    目录字面量注释变量标识符运算符字符串扩展数据输入字面量字面量:在代码中,被写出来的固定的值,称之为字面量。python中常用的有6种值(数据)的类型:注释注释:在程序代码中对程序代码进行解释说明的文字。作用:注释不是程序,不能被执行,只是对程序代码进行解释说明,让别人可......
  • python 基础习题6--for循环和while循环
    1.用for循环打印1--10这10个数字,格式如下:运行结果如下: 12345678910 2.用 while循环打印1-10这个10个数字,请在横线处填空:counter=1whilecounter<= ________:print(counter)___________ 3.请问这段代码返回什么结果:(可以在环境中......
  • JAVA基础——接口(全网最详细教程)
    概述我们已经学完了抽象类,抽象类中可以用抽象方法,也可以有普通方法,构造方法,成员变量等。那么什么是接口呢?接口是更加彻底的抽象,JDK7之前,包括JDK7,接口中全部是抽象方法。接口同样是不能创建对象的。  把特有的方法(行为)写成接口,要用的时候调用接口就行了,除了狗和青蛙......