百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试均可)

myzbx 2025-07-01 22:13 44 浏览

方法重载和方法重写的区别

方法重写

重写体现在继承关系上。 在Java中,子类继承父类,子类就会具备父类所以的特征,以及父类的方法和变量比如动物类有“叫”的方法,小狗小猫分别继承了动物类,重写方法时就可以分别将“叫”的方法改成“小狗汪汪叫”,“小猫喵喵叫”。

子类修改父类的方法,对方法进行扩展,丰富,这就叫做方法重写。

重写的方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。

方法重载

方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。

方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同。调用方法时通过传递给它们的不同个数和类型的参数,以及传入参数的顺序来决定具体使用哪个方法。

方法重载发生在编译时。

Public int add(int a,int b)
Public String add(int a, int b)

上面的两个方法在编译时会发生错误,虽然两方法的方法名相同,返回值类型可以不同,但是两个方法中的参数a和b类型都一样,返回值类型却不同,所以会报错。

String,StringBuffer,StringBuilder三者的区别

String是final修饰的,String的对象不可变,每次操作都会产生新的String对象,所以String修饰的常量是线程安全的。

StringBuffer和StringBuilder都是在原始创建的对象上操作的。StringBuffer和StringBuilder的相同点是他们都有公共父类AbstractStringBuilder抽象类。当调用StringBuffer和StringBuilder中的方法时,都会调用AbstractStringBuilder抽象类中的方法。

而StringBuffer和StringBuilder的不同点是StringBuffer是线程安全的,StringBuildel是线程不安全的,这是因为StringBuffer会在方法是添加synchronized锁

在性能方面,StringBuilder>StringBuffer>String
如果在使用时要改变字符串的内容,应使用前两个,在多线程使用共享变量时优先使用StringBuffer,因为其线程安全;在没有特殊情况下,优先使用StringBuilder,因为其效率高。

ArrayList和LinkedList的区别

ArrayList

ArrayList是List接口的一个实现类,基于动态数组存储的,并且存储地址是连续的。因为ArrayList内部的存储形式是数组的形式,所以不适合做大量的增删操作(尤其是在中间插入或删除元素,因为后面的数组都要向前或向后移动),但是ArrayList在遍历和查找元素时效率很高。

ArrayList适合下标访问,也适合随机访问,在进行随机的get,set方法调用时,ArrayList的效率比LinkedList效率高。

当存入的元素超过了设定的ArrayList的长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,即新建数组,将旧的数组中的数据拷贝到新的数组中,如果不是尾插法,后面的数据都要移动。

ArrayList list1 = new ArrayList();
list1.add("xiaowei");
List1.add("haoshuai");

对于上面的代码,当运行第一行,底层先创建了一个长度为0的数组,这是因为没有指定数组大小;当运行到第二行时,add第一个元素时,会初始化数组的大小为10(默认的,可指定),如果超过此容量,再次扩容时就是之前的1.5倍。

LinkedList

LinkedList是List接口的另一个实现类,LinkedList集合是一个双向链表,其内部包含有两个Node类型的first和last属性维护的双向循环链表,链表中的每一个元素都使用引用的方式来记住他的前一个和后一个元素,当插入或者删除一个节点时,只需要修改几个元素之间的引用关系就行了,无需造成数据的大量移动。所以Linked List在增删元素上具有很高的效率。

LinkedList没有初始化容量,其底层是双向链表结构,所以不存在扩容这一说。

优点:
随机增删元素效率较高,因为增删元素不涉及大量元素的位移。
缺点:
查询效率较低,每一次查找某个元素时都需要从头节点开始往下遍历

HashMap和Hashtable的区别

HashMap

HashMap 是 map 接口的实现类,是将键映射到值的对象,它的键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap 允许key和value为空值。

HashMap中的方法没有synchronized修饰,所以HashMap是线程不安全的。

HashMap的底层实现:数组+链表

jdk8开始如果链表高度到8,数组的长度超过64,链表就会转变为红黑树,元素以内部类Node节点存在。

计算key的hash值,二次hash然后对数组长度取模,对应到数组下标,如果没有产生hash冲突(下标位置没有元素),则直接创建Node存入数组,如果产生hash冲突,则先进行equal比较,相同的话就会取代该元素,如果不同的话,则判断链表高度插入链表,链表高度达到8,并且数组长度到64则转变为红黑树,长度低于6则将红黑树转回链表。

由于HashMap是线程非安全的,所以HashMap在效率上要优于HashTable。

HashTable

HashTable中的方法都被Synchronized修饰,所以在多个线程访问HashTable时,不需要自己为它的方法实现同步。HashTable是线程安全的。

HashTable无论是key还是value,都不能为null值。

遍历方面:

HashMap只支持Iterator(迭代器)遍历。

而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。

容量方面:

HashMap默认的容量大小是16;增加容量时,每次将容量变为“原始容量x2”。所以其容量一定是2的n次幂。

Hashtable默认的容量大小是11;增加容量时,每次将容量变为“原始容量x2 + 1”。

用HashMap实现的小游戏

以下是用HashMap实现的斗地主小游戏,代码有发牌和看牌的操作,可以运行一下玩玩。

import java.util.*;

public class PlayPoker {
    public static void main(String[] args) {
        HashMap<Integer, String> hm = new HashMap<Integer, String>();
        ArrayList<Integer> array = new ArrayList<Integer>();
//        color数组装牌的花色
        String[] color = {"","","",""};
//        num数组装牌的大小
        String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        int index = 0;
//        外层循环是牌的大小,内层循环是花色
        for (String num1 : num) {
            for (String color1 : color) {
                hm.put(index,color1+num1);
                array.add(index);
                index++;
            }
        }
        hm.put(index,"小王");
        array.add(index);
        index++;
        hm.put(index,"大王");
        array.add(index);
//        洗牌操作,掉头Collections工具类里面的shuffle方法
        Collections.shuffle(array);
//        用TreeSet来实现对牌的排序
        TreeSet<Integer> player1 = new TreeSet<Integer>();
        TreeSet<Integer> player2 = new TreeSet<Integer>();
        TreeSet<Integer> player3 = new TreeSet<Integer>();
        TreeSet<Integer> dp = new TreeSet<Integer>();
        for (int i = 0; i < array.size() ; i++) {
            int s = array.get(i);
//            最后三张就是底牌
            if (i >= array.size()-3) {
                dp.add(s);
            }else if (i % 3 == 0) {
                player1.add(s);
            }else if (i % 3 == 1) {
                player2.add(s);
            }else if (i % 3 == 2) {
                player3.add(s);
            }
        }

        lookPoker("蔡徐村",player1,hm);
        lookPoker("苏珊",player2,hm);
        lookPoker("小黑子",player3,hm);
        lookPoker("底牌",dp,hm);
    }
    public static void lookPoker(String name,TreeSet<Integer> t,HashMap<Integer,String> hm) {
        System.out.println(name+"的牌是:");
        for (Integer key : t) {
            String poker = hm.get(key);
            System.out.print(poker + " ");
        }
        System.out.println();
    }
}

文章到这里就先结束了,后面还会持续更新,希望能帮助到各位大佬。如果文章有需要改进的地方还请大佬斧正。
制作不易,希望能得到各位小伙伴儿的支持
小威再次感谢大家了。

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 &quot;小贱贱&quot;韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...