3 83年老蒜头

尚未进行身份认证

我要认证

看看世界有多大!!!

等级
TA的排名 4w+

Java集合:Set

Set集合,我们常见的Set有HashSet,TreeSet,LinkedHashSet,我们先来看下HashSet。一、HashSet成员变量: 成员变量只有可怜的两个,一个是装数据的容器,一个类似于标记 private transient HashMap<E,Object> map; private static final Object PRESENT = new Object();数据操作方法: 我们从添加/移除方法可以看出HashMap是以(Key,value

2020-09-02 23:01:50

Java集合:Map

一、Map概述一讲到Map,我们就会想到散列表和HashMap,散列表:数组+列表的节点,那就有两个问题了,如何进行存放元素的下标定位和如果出现哈希碰撞了怎么办?散列表详解链接Map常用类:HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap,接下来就是一一来看下它们。HashMap现在我们已知Map的底层结构为散列表,在JDK1.8中,HashMap在决定元素存放下标时,采用HashMap的哈希算法hash(key)&(length-1)。

2020-09-02 22:16:00

Java集合:List

一、集合概述在Java中,我们能想到的List接口下的类有那么两个半吧:①ArrayList,②LinkedList,③Vector。ArrayList:底层是数组初始容量为10,每次扩容为1.5倍组的增删改底层由System和Arrays的数组赋值拷贝方法支持LinkedList:底层是双向链表插入/删除操作适合LinkedList,查询操作适合ArrayList,Vector就是线程安全的ArrayList。二、ArrayList这里就直接上源码吧,先来看看成员变量和构造方法

2020-08-30 21:49:42

Java并发:线程池

线程目的线程复用,线程的创建与销毁是很消耗资源的。防止出现OOMThreadPoolExecutor直接来看下构造方法,不过一般构造线程池会用Executors这个工具类,且常用的方法有三个,有兴趣可以去看看,就直接上个最长的构造器。 // 可自定义扩展线程池 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,

2020-08-30 16:28:49

Java并发:Condition

Condition使用案例:消费模型public class ConditionTest { public static ReentrantLock lock = new ReentrantLock(); public static Condition notEmpty = lock.newCondition(); public static Condition notFull = lock.newCondition(); public static PriorityQue

2020-08-27 22:39:18

Java并发:AbstractQueuedSynchronizer

AbstractQueuedSynchronizer:抽象同步队列,简称AQS,它是实现同步器的基础组件,并发包中的锁的底层就是使用AQS实现的。开始正题:成员变量: //队列头结点 private transient volatile Node head; //队列尾节点 private transient volatile Node tail; // 同步器的状态,例如ReentrantLock用作锁是否被占用,锁重入的次数 // CountDownLatc

2020-08-26 21:18:00

56:第一个只出现一次的字符

第一个只出现一次的字符字符串中第一个只出现一次的字符在字符串中找出第一个只出现一次的字符,如输入"abaccdeff",输出’b’public class Offer56 { public static void main(String[] args) { new Offer56().firstNotRepeatingChar("abaccdeff"); } // 思路:我们只需要寻找一个数据结构来保存单个字符的次数,如数组,map public void fir

2020-08-21 21:39:39

55:丑数

丑数:因子只包含2,3,5的数,1为第一个丑数,2,3,5皆为丑数,请第1500个丑数。public class Offer55 { public static void main(String[] args) { System.out.println(new Offer55().getUglyNumber_solution(5)); } public int getUglyNumber_solution(int index){ if(index

2020-08-20 21:00:20

54:最长不含重复字符的子字符串

最长不含重复字符的子字符串public class Offer54 { public static void main(String[] args) { System.out.println(new Offer54().LongestSubStringWithoutDuplication("asfahjfabswr")); } public int LongestSubStringWithoutDuplication(String str) {

2020-08-19 21:41:47

53:礼物的最大价值

礼物的最大价值在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值你可以从棋盘的左上角开始拿格子里的礼物,每一次向右或者向下一格,直到右下角public class Offer53 { public static void main(String[] args) { int[][] arr = { {1,10,3,8}, {12,2,9,6}, {5,7,4,11},

2020-08-18 23:30:42

52:把数字翻译成字符串

把数字翻译成字符串给定一个数字,我们按照如下规则把它翻译为字符串,0翻译成"a",1翻译成"b",…11翻译成"l",25翻译成"z"。例如12258有5中不同的翻译,分别是""bccfi,“bwfi”,…public class Offer52 { public int getTranslationCount(int number) { if(number<0) return 0; //转字符 String sNu

2020-08-17 21:53:08

51:把数组排成最小的数

把数组排成最小的数public class Offer51 { //思路:进行一个类似冒泡排序的方法来排序即可 public String PrintMinNumber(int [] numbers) { if(numbers==null || numbers.length<=0) return ""; ArrayList<String> list = new ArrayList<String>();

2020-08-16 21:09:49

50:数学序列中某个的数字

数学序列中某个的数字数字以0123456789101112131415161718…的格式序列化到一个字符序列中。在这个序列中,第5位是5,第13位是1,第19位是4。实现一个函数,求任意第n位对应的数字。public class Offer50 { public static void main(String[] args) { int digit = new Offer50().digitAtIndex(13); System.out.println(di

2020-08-13 21:26:29

49:1~n整数中1出现的次数

1~n整数中1出现的次数输入一个整数n,求1~n这n整数的十进制表示中1出现的次数。主要还是一个找规律的题目。解题思路传送门public class Offer49 { public static void main(String[] args) { int i = new Offer49().numberOf1Between1AndN(21354); System.out.println(i); } public int numberOf1

2020-08-12 22:14:58

48:连续子数组的最大和

连续子数组的最大和输入一个整形数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)public class Offer48 { public static void main(String[] args) { int[] arr = {1,-2,3,10,-4,7,2,-5}; System.out.println(new Offer48().findGreatestSumOfSubArray(arr)

2020-08-11 22:14:05

47:数据流中的中位数

数据流中的中位数public class Offer47 { //默认最小堆实现 PriorityQueue<Integer> maxHeap = new PriorityQueue<>(); //实现最大堆需要重写Comparator PriorityQueue<Integer> minHeap = new PriorityQueue<>(10, new Comparator<Integer>() {

2020-08-10 20:35:14

46:最小的第K个数

最小的第K个数public class Offer46 { //基于快速排序的基础partition()方法 public void getLeastNumbers(int[] input,int[] output,int k){ if(input==null||input.length==0||output==null||k<0)return ; int start = 0; int end = input.length-1;

2020-08-09 13:48:23

45:数组中出现次数超过一半的数字

数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半public class Offer45 { public static void main(String[] args) { int[] data = {1,4,3,2,4,2,5,4,2}; System.out.println(new Offer45().moreThanHalfNum(data)); } //思路:数字出现的次数超过数组的一半,我们如果把该数字的次数和剩余数组的次

2020-08-08 19:53:47

44:字符串的排序

字符串的排序输入一个字符串,打印出该字符串中字符的所有排序public class Offer44 { public static void main(String[] args) { String str = "abc"; char[] arr = str.toCharArray(); permutation(arr, 0); } public static void permutation(char[] arr, int begin)

2020-08-07 22:54:30

43:序列化二叉树

序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树序列化:把二叉树转换为字符串 反序列化:把字符串转换为二叉树public class Offer43 { public static void main(String[] args) { TreeNode node = Main.createNode(); String serialize = new Offer43().Serialize(node); System.out.println

2020-08-06 21:51:50

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。