JAVA
女搬运工
唯有坚持,方能水滴石穿
展开
-
Java字符串翻转函数实现
public static char[] reverse(String str) { char[] arr = str.toCharArray(); for (int i = 0; i < arr.length / 2; i++) { char temp = 0; temp = arr[i]; arr[i] = arr[a...原创 2018-07-31 14:11:19 · 574 阅读 · 0 评论 -
JAVA:ArrayList常用方法+底层源码分析
Arraylist特点:动态开辟,初始容量为10,只能放引用数据类型ArrayList<Integer> arrayList=new ArrayList<Integer>(); Arraylist增加元素,自增扩容方式1.5倍,Arrays.copyof()拷贝 可以放重复值,可以放多个null值 arrayList.add(12...原创 2018-12-05 16:07:24 · 233 阅读 · 0 评论 -
JVAV:Linkedlist 常用方法和源码分析
LinkedList底层:双向链表 增加,删除效率高 数据可以重复存储 可以存储多个null值 插入数据的有序性遍历方法通过迭代器遍历,双向遍历,其中除了提供hashnext()和next()方法外,还提供...原创 2018-12-05 17:13:30 · 191 阅读 · 0 评论 -
JAVA:HashMap常用方法,对于自定义类的存储,源码分析
public static void main(String[] args) { //hashMap存储结构为数组+链表 //数据存储方式为键值对 HashMap<String, Integer> hashMap = new HashMap<String, Integer>(); hashMap.p...原创 2018-12-05 18:15:39 · 555 阅读 · 0 评论 -
JAVA:hashtable常用方法和源码分析
public static void main(String[] args) { Hashtable<String,Integer> hashtable=new Hashtable<String, Integer>(); /**hashtable底层数据结构:数组+链表 * 不能存储Null值 ...原创 2018-12-05 19:38:29 · 456 阅读 · 0 评论 -
JAVA:hashset常用方法和源码分析
public static void main(String [] args){ /**hashset特点: * 1.继承关系 * public class HashSet<E> * extends AbstractSet<E> * implements Set<...原创 2018-12-06 15:30:12 · 180 阅读 · 0 评论 -
JAVA:treemap常用方法和源码分析
public static void main(String [] args){ /* 源码分析: 1.继承关系 class TreeMap<K,V>extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Se...原创 2018-12-06 16:04:45 · 305 阅读 · 0 评论 -
JAVA:生产者消费者模型
消费者: class ConsumerDemo extends Thread{ private Queue<Integer> queue; private int maxSize; private Condition lock; private ReentrantLock reentrantLock; public ConsumerDemo...原创 2019-01-17 16:21:20 · 134 阅读 · 0 评论 -
java:锁机制
多个线程竞争一片资源时,需要考虑先来后到,否则会发生线程并发问题,那么如何考虑先来后到,就会使用到锁机制锁的类型:乐观锁:读多写少,遇到并发写的可能性低,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁。但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较更上一次的版本号,如果一样则更新),如果失败则要重复复读 ...原创 2019-01-14 16:07:49 · 148 阅读 · 0 评论 -
Java 可重入锁与synchronized的区别
ReenTrantLock可重入锁(和synchronized的区别)总结等待可中断:在synchronized中,如果一个线程在等待锁,他只用两种结果,要么获得锁执行完,要么一直保持等待。可中断得等待是通知正在等待的线程,告诉他没必要再等待后。实现公平锁:公平锁:会按照时间的先后顺序,保证先到先得。特点是它不会产生饥饿现象。而synchroized关键字进行所控制时,锁是非公平的。而重入锁...原创 2019-01-14 17:04:50 · 687 阅读 · 0 评论 -
JAVA:concurrentHashMap
Hashtable是一个线程安全的类,通过使用synchronized来锁住整张Hash表来实现线程安全的。由于对整个表加锁会导致操作效率低。为此,为了实现一个线程安全且效率高的数据结构,Concurrenthashmap通过使用分段加锁的机制来提高效率。1.如何实现分段加锁的机制Concurrenthashmap使用分段锁技术,将数据分为一段一段的存储,然后给每一段数据配一...原创 2019-01-16 21:12:21 · 489 阅读 · 1 评论 -
JAVA:NIO
import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSoc...原创 2019-02-26 11:35:46 · 129 阅读 · 0 评论 -
JAVA:NIO中的缓冲区(Buffer)详解 -------源码
缓冲区buffer1.作用buffer是一个抽象类,存在于java.nio包中,在java NIO中负责数据的存取,缓冲区(buffer)就是数组,用于存储不同数据类型的数据,根据数据类型不同(boolean除外),提供了相应类型的缓冲区。ByteBuffer,shortBuffer,IntBuffer,...原创 2019-03-08 13:33:31 · 522 阅读 · 0 评论 -
java:二分查找
public static int BinarySearch(int [] arr,int value) { if(arr.length==0){ return -1; } int low = 0; int hight=arr.length-1; int mid=arr.length/2;...原创 2019-06-10 21:03:40 · 265 阅读 · 0 评论 -
JAVA:Enumeration枚举遍历和iterator遍历的区别源码分析
Enumeration与iterator都是提供对集合元素遍历的接口。Iterator提供的方法:boolean hasNext():用来判断当前游标后面是否还存在元素,如果存在就返回true,不存在就返回false。Object next():先返回当前游标右边的元素,然后游标后移一个位置。void remove():删除最近返回的元素。使用:public stati...原创 2018-11-22 10:50:44 · 843 阅读 · 1 评论 -
Java:直接插入排序
直接插入排序就是直接将一个数插入到有序的 序列中,对于数组n,可你看作是两个序列,第一个序列是数组的第一个元素,第二个序列是原数组,将第二个序列依次插入到第一个序列中,下面实现 方法:sort方法是将一个元素让入到有序数列中,insertSort方法是对整个数组的操作public class InsterSort<T extends Comparable<T>&...原创 2018-10-20 15:50:12 · 154 阅读 · 0 评论 -
JAVA:MyArraylist泛型自己实现
MyArraylist :public class MyArraylist <T> { private T[] arr; private int size; private static final int CAPACITY = 10; public MyArraylist() { this(CAPACITY); } ...原创 2018-10-09 14:47:15 · 661 阅读 · 0 评论 -
Java冒泡排序的函数实现
public static int[]sort(int[]arr){ for(int i=0;i<arr.length;i++){ for(int j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ int temp=0; ...原创 2018-07-31 14:24:59 · 1982 阅读 · 0 评论 -
JAVA:应用两种方法 清除字符串中的空格
方法一://清除字符串中的空格// 1.需要计算空格个数// 2.将字符串平移// 3.由于平移之后字符串后面会出现重复,将字符串中的重复的第一个赋值为'\0';在主程序中打印时只打印'\0'之前的 public static char[] remove(String str, char ch) { char[] arr = str.toChar...原创 2018-07-31 15:01:26 · 580 阅读 · 0 评论 -
JAVA:实现二分查找
应用 while循环public static int search(int[]arr,int num){ int lower=0,upper=arr.length; int mid=0; while (arr[mid]!=num){ mid=(lower+upper)/2; if(num>arr[mid]){ ...原创 2018-07-31 15:52:14 · 503 阅读 · 0 评论 -
JAVA:两种方法实现斐波那契数列
方法一:for循环public static int fab(int n){if(n==1||n==2) return 1;int i=1,j=1,sum=0;for(int z=3;z<=n;z++){ sum=i+j; i=j; j=sum;}return sum;}public static void main(Strin...原创 2018-08-02 13:40:50 · 2117 阅读 · 0 评论 -
JAVA:1+2+······+n 两种方法实现
方法一:public static int add(int num) { if (num == 0) return 0; if (num == 1) { return 1; } else { return add(num - 1) + (num); }}public static void mai...原创 2018-08-02 13:50:05 · 1609 阅读 · 0 评论 -
JAVA:循环删除数字------------游戏中的循环报数退出问题------- 约瑟夫环问题
问题:循环报数游戏,有n个人,每一个人编号从1开始,依次编号到n.从1到3报数,报3的退出游戏,得出最后获胜人的编号。问题分析:1.“循环”问题的处理 取余操作 2.报3的退出 a.表示退出 需要一个数来表示该编号的人不能再参与游戏,这里我用的是-1表示...原创 2018-08-08 10:01:49 · 938 阅读 · 0 评论 -
JAVA:用递归计算数组的有效长度
public static int getArraysNum(int[] arr,int n){ if(n==0){ return arr[0]==0?0:1; } return arr[n]==0?getArraysNum(arr, n-1):getArraysNum(arr, n-1)+1;}public static void main(String[]...原创 2018-08-08 10:12:13 · 1033 阅读 · 0 评论 -
JAVA:包含空格,正负号的数字字符串转化为数字
1.计算空格,正负号个数2.char型的数字---------->数字型 -'0' //传入转化为整型数组的数组arr,最终的+-号endsigs public static int ArraysToNumbers(int []arr,int endsigs){//将整型数组转化为数字并最终输出带有正负号的数 int result=0; ...原创 2018-08-08 12:59:57 · 3574 阅读 · 0 评论 -
JAVA:汉诺塔
//汉诺塔问题public static void move(int num,char src,char aim){ System.out.printf("第%d号盘子,从%c位置移动到%c位置;",num,src,aim);}public static void hanuota(int n,char a,char b,char c){ if(n==1){ move...原创 2018-08-08 13:11:33 · 166 阅读 · 0 评论 -
JAVA:异常处理
程序中的错误可以分为三类:编译错误,逻辑错误和运行时错误编译错误:是由于没有遵循Java语言的语法规则而产生的,这种错误要在编译阶段排除,否则程序不可能运行逻辑错误:编译正常,也能运行,但结果不是人们期待的运行时错误:运行过程中出现的错误,也有可能由逻辑错误引起异常处理:主要目的是即使在程序运行时发生了错误,也要保证程序能正常结束,避免由于错误而使正在运行的程序中途停止什么...原创 2018-09-17 21:58:33 · 383 阅读 · 0 评论 -
JAVA类的全面总结
java是面向对象:下面解释什么面向对象JAVA操作都是类中操作如上图Cat类,实例化可以在main函数中那么java本身就是类操作,为什么还要学习继承多态接口包?官方回答:可读性强,安全性高,代码简化,维护性高,方便查找错误等下面我要从现实生活的角度去说,(仅个人观点):从现实世界中来,必然也要归回现实生活,这是自然法则,那么编成也不例外,我们生活中分类例子比比皆...原创 2018-09-13 14:16:55 · 358 阅读 · 0 评论 -
JAVA:方法重写和方法重载的区别
重载 定义:在同一类中两个或者多个方法的重写规则: 方法名 相同 参数列表 不同 (个数,类型,参数顺序) 返回...原创 2018-09-14 10:52:05 · 253 阅读 · 0 评论 -
JAVA:接口和抽象类的区别
1.从设计层面来说,抽象是对类的抽象,是一种模板设计 ,接口是行为的抽象,是一种行为的规范 接口 interface 抽象类 接口中所有方法都是抽象的 抽象类中可以有抽象方法和普通方法 一个类可以实现多个接口 一个类只能继承一个抽象类 接口中成员变量默认public static final类型的(都可以 省略),必须被显示...原创 2018-09-14 11:13:38 · 196 阅读 · 0 评论 -
java:用两个栈模拟队列《剑指offer》
package tulun.stack20181014;import java.util.Stack;public class Queue<T> { /** * 用两个栈模拟队列: * 队列先进先出 * 栈后进先出 */ Stack<T> stack1=new Stack<T>();...原创 2018-10-14 10:17:49 · 212 阅读 · 0 评论 -
java剑指Offer :二维数组中查找
import java.util.Arrays;public class findInArray { public static void main(String[] args) { int[][] arr={{1,2},{3,4}}; int[] find = Find1(arr, 2); System.out.println(Arrays...原创 2019-06-10 21:06:16 · 276 阅读 · 0 评论