IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Object类中有哪些常用方法 / StringBuildder与StringBuffer的区别 / Vector与ArrayList的区别 / HashMap与Hashtable的区别 -> 正文阅读

[数据结构与算法]Object类中有哪些常用方法 / StringBuildder与StringBuffer的区别 / Vector与ArrayList的区别 / HashMap与Hashtable的区别

一、Object类中有哪些常用方法?

查看API手册是最快捷的办法!!

<底部存在测试代码>

二、StringBuildder与StringBuffer的区别

1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,

2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,

而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。

3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全

而StringBuffer则每次都需要判断锁,效率相对更低

(打印效率:StringBuilder > StringBuffer > String

使用环境:操作少量数据时,使用String,

????????? 单线程操作大量数据时使用StringBuilder

????????? 多线程操作大量数据时使用StringBuffer

三、Vector与ArrayList的区别

Array List:

1、ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。

2、数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。

因此,它适合随机查找和遍历,不适合插入和删除。

Vector

  1. Vector也是通过数组实现的,不同的是它支持线程同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致行,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

(Vector和ArrayList在插入与删除数据方面的性能差距不大,可以说是几乎没有差别!)

四、HashMap与Hashtable的区别

HashMap:

1、hashMap的原理:底层是数组和链表 以key和value的形式存在,key不能重复,value可以重复。

2、他的默认的容量为16,加载因子为0.75,每次扩容2倍

3、存放数据:当我们添加数据的时候,先对key进行hash算法,hash值%16

得到一个下标为0-15的值。

通过这个值找到数组的下标对应位置,判断这个位置是否有值,没有值,直接存放数据,有值则对key进行equals比较,一样就覆盖之前的数据,不一样则以链表形式存放数据。

4、散列桶中的数据达到8个的时候就和形成红黑树。

Hashtable:

1、Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。

2、Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。

3、Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆。

测试代码:

StringBuildder与StringBuffer

public static void main(String[] args) {

??? method();

?? // method2();

}

public static void method() {

??? //1.定义字符串

??? String str = "太阳太大,西瓜爆出果粒橙";



??? //2.将指定的字符串拼接10000次

??? //2.1定义变量,用来保存最终拼接的结果

??? String result ="";

??? //2.2拼接10000次

??? /**4.可以添加一个计时功能*/

??? //4.1获取系统当前时间作为开始时间

??? long t1 = System.currentTimeMillis();//ms

??? for(int i = 0; i < 10000 ; i++) {

??????? result = result + str;

??? }

??? //4.2获取系统当前时间作为结束时间

??? long t2 = System.currentTimeMillis();//ms

??? //3.打印拼接好的字符串

??? //注意:eclipse控制台显示数据有限制,都打印在同一行了,所以控制台看不出来打印的内容

??? //可以通过全选,复制拿出来看数据是否拼接成功

??? System.out.println(result);



??? //4.3打印拼接总共花费的总时长

??? System.out.println(t2-t1);

}



public static void method2() {

??? //1.定义字符串

??? String str = "太阳太大,西瓜爆出果粒橙";



??? //2.将指定的字符串拼接10000次

??? /**优化1:String-->StringBuffer/StringBuilder*/

??? StringBuffer sb = new StringBuffer();//创建工具类对象1

??? StringBuilder sb2 = new StringBuilder();//创建工具类对象2



??? //2.2拼接10000次

??? /**4.可以添加一个计时功能*/

??? //4.1获取系统当前时间作为开始时间

??? long t1 = System.currentTimeMillis();//ms

??? for(int i = 0; i < 10000 ; i++) {

??????? /**优化2:+ -->append() */

??????? //result = result + str;

??????? sb.append(str);

??????? //sb2.append(str);

??? }

??? //4.2获取系统当前时间作为结束时间

??? long t2 = System.currentTimeMillis();//ms

??? //3.打印拼接好的字符串

??? //注意:eclipse控制台显示数据有限制,都打印在同一行了,所以控制台看不出来打印的内容

??? //可以通过全选,复制拿出来看数据是否拼接成功

??? //4.3打印拼接总共花费的总时长

??? System.out.println(sb.toString());//打印拼接的结果

??? System.out.println(t2-t1);

}

Vector与ArrayList

package cn.detu.java;



import java.util.Vector;

import java.util.ArrayList;

import java.util.List;



public class D4 {

??????? public static void main(String[] args) {

//??????????? Vector<String> vector = new Vector<>();//插入

//??????????? Long start = System.currentTimeMillis();

//??????????? for (int i = 0; i < 10000; i++) {

//??????????????? vector.add("data" + i);

//??????????? }

//??????????? Long end = System.currentTimeMillis();

//??????????? Long time = end - start;

//??????????? System.out.println("time:"+time);





??????????????????? List<String> list = new ArrayList<>();

??????????????????? Long start = System.currentTimeMillis();

??????????????????? for (int i = 0; i < 10000; i++) {

??????????????????????? list.add("data" + i);

??????????????????? }

??????????????????? Long end = System.currentTimeMillis();

??????????????????? Long time = end - start;

??????????????????? System.out.println("time:"+time);
 
 
 
 
 
//??????????????????? Vector<String> vector = new Vector<>();//删除

//??????????????????? for (int i = 0; i < 20000; i++) {

//??????????????????????? vector.add("data" + i);

//??????????????????? }

//??????????????????? Long start = System.currentTimeMillis();

//??????????????????? for (int i = 0; i < 10000; i++) {

//??????????????????????? vector.remove(i);

//??????????????????? }

//??????????????????? Long end = System.currentTimeMillis();

//??????????????????? Long time = end - start;

//??????????????????? System.out.println("time:" + time);







//??????????????????? List<String> list = new ArrayList<>();

//??????????????????? for (int i = 0; i < 20000; i++) {

//??????????????????????? list.add("data" + i);

//??????????????????? }

//??????????????????? Long start = System.currentTimeMillis();

//??????????????????? for (int i = 0; i < 10000; i++) {

//??????????????????????? list.remove(i);

//??????????????? ????}

//??????????????????? Long end = System.currentTimeMillis();

//??????????????????? Long time = end - start;

//??????????????????? System.out.println("time:" + time);



??????????????? }



??????????? }
HashMap与Hashtable??????? 
HashMap允许键值对是空值的情况,而HashTable不可以。
 
package cn.detu.java;



import java.util.HashMap;

import java.util.Hashtable;

import java.util.Map;

import java.util.Map.Entry;

public class D5 {



??????? public static void main(String[] args) {

??????????? //初始化map和table

??????????? Map<Integer,String> map = new HashMap<>();

??????????? Map<Integer,String> table = new Hashtable<>();



??????????? //向map添加key=null,value=null,正常运行

??????????? map.put(null, null);

??????????? //正常输出1

??????????? System.out.println(map.size());



??????????? //向table中添加key=null,捕获到空指针异常

//??????????? table.put(null,null);

//??????????? System.out.println(table.size());



??????????? try{

??????????????? table.put(null, "hello");

??????????? }catch(NullPointerException e){

????????? ??????//输出:key空指针异常:java.lang.NullPointerException

??????????????? System.out.println("key空指针异常:"+e);

??????????? }

?????????? 

??????? }

??? }

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:48:54  更:2021-08-24 15:49:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:37:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码