Java随手笔记

常用数据类型和类

String

构造

String s = “xxx”
String(String original)
String(char数组)	
String(char数组,起始下标,长度)	
String(byte数组)	
String(byte数组,起始下标,长度)	
String(StringBuffer buffer)	
String(StringBuilder builder)

方法

boolean isEmpty()	字符串是否为空
int 	length()	字符串长度
char 	charAt(int index)			返回指定位置的字符
boolean contains(CharSequence s)	判断字符串是否包含s
String 	replace(CharSequence target, CharSequence replacement)	用replacement替换字符串target的字符
---------------------------------------------------------------------------------------------
boolean startsWith(String prefix)	判断字符串是否以prefix开始
boolean endsWith(String suffix)		判断字符串是否以suffix结尾
int 	indexOf(String str)		返回str在字符串第一次出现的位置
int 	lastIndexOf(String str)	返回str最后一次出现的位置
---------------------------------------------------------------------------------------------
String[] split(String regex)					将字符串以regex分割
String 	substring(int beginIndex)				从beginIndex开始截取字串
String 	substring(int beginIndex, int endIndex)	截取beginIndex到endIndex - 1的字符串
---------------------------------------------------------------------------------------------
boolean equals(Object anObject)					判断两个串是否相等
boolean equalsIgnoreCase(String anotherString)	忽略大小写判断两个串是否相等
int 	compareTo(String anotherString)			比较两个字符串。相等返回0;前大后小返回1;前小后大返回-1
---------------------------------------------------------------------------------------------
byte[] 	getBytes()		将字符串串变成字节数组返回
char[] 	toCharArray()	将字符串转换乘char数组
String 	toLowerCase()	字符串转小写
String 	toUpperCase()	字符串转大写
String 	trim()	去除字符串两边空格
静态方法	
static String valueOf(int i)	将 i 转换成字符串

int[]

import java.util.Arrays;
**长度
list.length()
**二维数组及排序
Integer[] num = {1,3,5,7,9};
Integer[] num_ = new Integer(num);
Integer[][] num_2d = {{1,3,5,7,9}, {2,4,6,8,10}};
Arrays.sort(num);
//Arrays.sort(num_2d); 不可以
**数组作为函数返回值
//public int[] func();
void BubbleSort(int array[], int n)
{
    int i, j, k;
    for(i=0; i<n-1; i++)
        for(j=0; j<n-1-i; j++)
        {
            if(array[j]>array[j+1])
            {
                k=array[j];
                array[j]=array[j+1];
                array[j+1]=k;
            }
        }
}

在这里插入图片描述

List

格式:[ , , , ]
index: 0, 1,... < length
依赖:import java.util.List;
List list_init = new ArrayList<Integer>();
        /*
        void 	add(int index, E element)	指定位置添加元素
        E    	set(int index, E element)  	替换指定位置的元素,返回更新前的元素
        E    	get(int index)	            获取指定索引的元素
        E    	remove(int index)	        删除指定索引的元素
        -----------------------------------------------------------------------
        boolean contains(Object o)			list中是否包含某个元素
        int	 	indexOf(Object o)	        获取指定元素的索引
        boolean	isEmpty()					判断list是否为空
        boolean equals(List l)				对比两个list中的所有元素
        -----------------------------------------------------------------------
        List	subList(fromIndex, toIndex)	利用list中索引位置重新生成一个新的list(截取集合)
        String	toString()					将集合转换为字符串
        Array	toArray()					将集合转换为数组
         */
list_init.add(1);
list_init.add(2);
list_init.add(4); //[1, 2, 4]
list_init.add(1, 3); //[1, 3, 2, 4]
list_init.set(3, 1); //[1, 3, 2, 1]
System.out.println("5的位置:" + list_init.indexOf(5)); //5的位置:-1
List<List<Integer>> list_2d = new ArrayList<>();

比较排序
方法一(修改原有类)
Collections.sort(list);
	被排序对象Person的方法重写:
	@Override
	    public int compareTo(Person p) {
	        return p.getAge() - this.getAge();
	    }
方法二(扩充一个原有类的比较器)
Collections.sort(list, new PersonComparator());
	class PersonComparator implements Comparator<Person> {
	    @Override
	    public int compare(Person p1, Person p2) {
	        return p2.getAge() - p1.getAge();
	    }
	}
	@Getter
	@Setter
	@ToString
	class Person {
		...

LinkedList

在这里插入图片描述

增加:						删除:				查:
默认加载表尾					默认移出表头
add(E e) = push(E e)		remove() = pop()	
add(int index, E element)	remove(E e)			get(int index)
addFirst(E e)				removeFirst(E e)	getFirst()
addLast(E e)				removeLast(E e)		getLast()
----------------			---------------		
offer(E e)                  poll()  			peekFirst()
offerFirst(E e)             pollFirst()                                                                                     offerLast(E e)				pollLast()

增加:
add(E e):在链表后添加一个元素;   通用方法
addFirst(E e):在链表头部插入一个元素;  特有方法
addLast(E e):在链表尾部添加一个元素;  特有方法
push(E e):与addFirst方法一致  
offer(E e):在链表尾部插入一个元素                                                                                                                                                  add(int index, E element):在指定位置插入一个元素。      
offerFirst(E e):JDK1.6版本之后,在头部添加; 特有方法                                                                                                         offerLast(E e):JDK1.6版本之后,在尾部添加; 特有方法

删除:
remove() :移除链表中第一个元素;    通用方法  
remove(E e):移除指定元素;   通用方法
removeFirst(E e):删除头,获取元素并删除;  特有方法
removeLast(E e):删除尾;  特有方法
pollFirst():删除头;  特有方法
pollLast():删除尾;  特有方法
pop():和removeFirst方法一致,删除头。 
poll():查询并移除第一个元素     特有方法    

查:
get(int index):按照下标获取元素;  通用方法
getFirst():获取第一个元素;  特有方法
getLast():获取最后一个元素; 特有方法
peek():获取第一个元素,但是不移除;  特有方法
peekFirst():获取第一个元素,但是不移除; 
peekLast():获取最后一个元素,但是不移除;
pollFirst():查询并删除头;  特有方法
pollLast():删除尾;  特有方法
poll():查询并移除第一个元素     特有方法

Stack:基于数组实现,随机访问(查找)效率更高,增删改效率较低
LinkedList:基于链表实现,增删改效率更高,随机访问(查找)效率较低

ArrayDeque和LinkedList这两者底层,一个采用数组存储,一个采用链表存储;
数组存储,容量不够时需要扩容和数组拷贝,通常容量不会填满,会有空间浪费;
链表存储,每次push都需要new Node节点,并且node节点里面有prev和next成员,也会有额外的空间占用。
ArrayDeque用作栈时比Stack快没有疑问,用作队列的时候似乎也会比LinkedList快!

Deque<Character> stack = new LinkedList<Character>();
LinkedList<Character> stack = new LinkedList<Character>();

Dictionary

格式:key:value
依赖:import java.util.*;
Dictionary<String, Integer> dict = new Hashtable<>();
        /*
        int             size()              返回字典的大小。
        boolean         isEmpty()           如果没有键值映射,则返回true,否则返回false。
        Enumeration<K>  keys()              返回字典中键的枚举。
        Enumeration<K>  elements()          返回字典中值的枚举。
        V               get(Object key)     返回与键关联的值,如果键不存在,则返回null。
        V               put(K key, V value) 将键值对添加到字典中。 如果任何键值为null,则抛出NullPointerException 。 如果键已经存在,则返回关联的值,然后更新新值。 如果是新密钥,则返回null。
        V               remove(Object key)  从字典中删除键/值对。 返回与键关联的值。 如果键在字典中不存在,则不执行任何操作,并返回null。
         */

应用

转换

String 转 char[]

char[] chars = s.toCharArray();

String 转 int

int i = Integer.parseInt([String]);
int i = Integer.valueOf(my_str).intValue();

int 转 String

String s = String.valueOf(i);
String s = Integer.toString(i);
String s = "" + i;

int 转 Integer

Integer A=new Integer(a);
Integer A=Integer.valueOf(a);

Integer 转 int

int a=A.intValue();

int[] 转 List

List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList());List item = castList(data, Integer.class);
	public static <T> List<T> castList(Object obj, Class<T> clazz)
    {
        List<T> result = new ArrayList<T>();
        if(obj instanceof List<?>) {
            for (Object o : (List<?>) obj) {
                result.add(clazz.cast(o));
            }
            return result;
        }
        return null;
    }

ArrayList 转 int[]

List<Integer> list = new ArrayList<>();
int size = list.size();
先转Integer数组
Integer[] arrs = list.toArray(new Integer[size]);
for(int i = 0; i < intarrs.length; i++){
	intarrs[i] = arrs[i].intValue();
}
或 直接遍历
int []intarrs=new int[size];
for(int i=0;i<intarrs.length;i++){
	intarrs[i]=list.get(i);
}

判断 int 是否为空

Integer b = new Integer(a); 	a不可为null,否则报错

排序

Arrays.sort(es, (e1, e2) -> {
	if(e1[0] == e2[0]) return e2[1] - e1[1];
	return e1[0] - e2[0];
});

Arrays.sort(a, cmp);
class MyComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
	//如果o1小于o2,我们就返回正值,如果o1大于o2我们就返回负值,
	//这样颠倒一下,就可以实现反向排序了
	if(o1 < o2) { 
		return 1;
	}else if(o1 > o2) {
		return -1;
	}else {
		return 0;
	}
}

格式

数据结构

public class ListNode {
	int val;
	ListNode next;

	ListNode() {}
	
	ListNode(int val) {this.val = val;}
	
	ListNode(int val, ListNode next) {
		this.val = val;
        this.next = next;
	}
}

防止溢出

try {
	sum = Math.addExact(nums[i], nums[j]);
	sum = Math.addExact(sum, nums[p]);
} catch (ArithmeticException aex) {
	break;
}

字符串拼接

StringBuilder sb = new StringBuilder();
sb.append(bull);
sb.append("A");
sb.append(count);
sb.append("B");
return sb.toString();

最大/小值

Math.max();
Math.min();

反射机制

public static Object getFieldValue(Object target, String fieldName){
    // get field from class
    Field field = target.getClass().getDeclaredField(fieldName);

    // set accessability to "public"
    field.setAccessible(true);
    try{
        // get value
        return field.get(target);
    } catch(IllegalAccessException e){
        // or throw error
        throw new IllegalStateException(e);
    }
}
然后可以使用以下命令轻松地调用它:
Object value = getFieldValue(this, "sample");

遍历

for (int i : list) {
	... list.get(i)...
}

list.forEach(
	item -> {
		...item...;
});

for (Iterator iterator = list.iterator(); iterator.hasNext();) {
	...iterator.next()...
}

Leetcode

编写一个函数来查找字符串数组中的最长公共前缀。

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs == null) {
            return "";
        }
        String prefix = strs[0];
        int count = strs.length;
        for (int i = 1; i < count; i++) {
            prefix = longestCommonPrefix(prefix, strs[i]);
            if (prefix.length() == 0) {
                break;
            }
        }
        return prefix;
    }

    public String longestCommonPrefix(String str1, String str2) {
        int len = Math.min(str1.length(), str2.length());
        int index = 0;
        while (index < len && str1.charAt(index) == str2.charAt(index)) {
            index++;
        }
        return str1.substring(0, index);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基础知识笔记通常会涵盖以下几个核心主题: 1. Java概述:包括Java的历史、平台无关性、JVM(Java Virtual Machine)的作用和Java的核心API(如java.lang包)。 2. 数据类型和变量:基本数据类型(如int, float, char等)、引用类型(如String, Object),以及变量的声明、初始化和作用域。 3. 控制结构:条件语句(if-else, switch)、循环(for, while, do-while)、异常处理(try-catch-finally)。 4. 类和对象:封装、继承和多态的概念,类的定义、构造函数和析构函数,以及实例化对象和方法调用。 5. 面向对象编程:接口、抽象类和它们的区别,以及设计模式的基本概念。 6. 数组和集合:数组的定义、操作,以及ArrayList、LinkedList、HashMap等常用集合框架的使用。 7. 输入输出流:文件I/O、标准输入输出流(System.in/out)的处理。 8. 方法和函数:静态方法、重载方法、递归等。 9. 异常处理:异常的抛出、捕获和处理机制。 10. IO流和网络编程:Socket编程、HTTP请求等。 创建一个Markdown格式的笔记,可能会包括标题、列表项、代码示例和注释。例如: ```markdown # Java基础笔记 ## 1. Java简介 - Java语言特点: 平台无关性、垃圾回收机制 - JVM: 负责执行Java字节码 ## 2. 数据类型 - int, double, String等基本类型 - ```java // 声明并初始化一个整型变量 int num = 10; ``` ## 3. 控制结构 - if-else: 条件判断 - ```java if (num > 0) { System.out.println("Positive"); } ``` ... ### 附录:常用类库 - java.util: 集合框架 - java.io: I/O流处理 ``` FileInputStream fileIn = new FileInputStream("file.txt"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值