java stl

目录

目录

String、StringBuilder、StringBuffer

 常用正则表达式

ArrayList

Map:键值对

无序不重复:HashMap

 有序不重复:TreeMap

Map常用api(包括HashMap,TreeMap等): 

集合与数组相互转换

 List与数组

 List,Set,Map之间

位运算


String、StringBuilder、StringBuffer

// String
@Test
public void test16() throws Exception {

    String s1 = "HelloWorld";
    // 输出字符串长度
    System.out.println(s1.length());  // 10
    // 获取字符串中某个字符
    System.out.println(s1.charAt(0));  // H
    // 判断字符串是否为空
    System.out.println(s1.isEmpty());  // False
    // 将字符串转化为全小写/全大写 后返回
    System.out.println(s1.toLowerCase());  // helloworld
    System.out.println(s1.toUpperCase());  // HELLOWORLD
    System.out.println(s1);  // HelloWorld
    // 去除字符串前后的空格
    System.out.println("--" + "  he llo  world   ".trim() + "--");  // --he llo  world--
    // 比较字符串
    String s2 = "helloWorld";
    System.out.println(s1.equals(s2));  // false  直接比较字符串内容
    System.out.println(s1.equalsIgnoreCase(s2));  // true  忽略大小写比较字符串内容
    // 字符串连接
    System.out.println(s1.concat("You"));  // HelloWorldYou  等价于+
    // 比较字符串的大小
    System.out.println("abc".compareTo("abcd"));  // -1  负数意味着左边小,正数左边大,0相等
    // 截取字符串 substring(int beginIndex, int endIndex) 左闭右开
    String s3 = "我爱你中国";
    System.out.println(s3.substring(3));  // 中国
    System.out.println(s3.substring(0, 3));  // 我爱你


    System.out.println("-------------------------------------");
    System.out.println(s1);  // HelloWorld
    // 测试此字符串是否以指定的后缀结束
    System.out.println(s1.endsWith("world"));  // false
    // 测试此字符串是否以指定的前缀开始
    System.out.println(s1.startsWith("He"));  // true
    // 测试此字符串从指定索引开始的子字符串是否以指定前缀开始
    System.out.println(s1.startsWith("ll", 2));  // true


    System.out.println("-------------------------------------");
    System.out.println(s1);  // HelloWorld
    // 测试当前字符串是否包含指定的char值序列
    System.out.println(s1.contains("ll"));  // true

    // 返回指定子字符串在此字符串中第一次出现处的索引,没有返回-1
    System.out.println(s1.indexOf("ll"));  // 2
    // 返回指定子字符串在此字符串中第一次出现处的索引,从指定索引开始
    System.out.println(s1.indexOf("ll", 5));  // -1

    // 返回指定子字符串在此字符串最右边出现的索引
    System.out.println(s1.lastIndexOf("o"));  // 6
    // 返回指定子字符串在此字符串最右边出现的索引,从指定索引开始反向搜索
    System.out.println(s1.lastIndexOf("o", 5));  // 4


    System.out.println("-------------------------------------");
    String s4 = "北京欢迎您! 北京欢迎您!";
    // String replace(char a, char b)
    // 返回一个新的字符串,它是通过b替此字符串中出现的所有a得到的
    System.out.println(s4.replace('北', '南'));  // 南京欢迎您! 南京欢迎您!
    // String replace(CharSequence a, CharSequence b)
    // 返回一个新的字符串,它是通过b替此字符串中出现的所有a得到的
    System.out.println(s4.replace("北京", "上海"));  // 上海欢迎您! 上海欢迎您!

    // String replaceAll(String regex, String b)
    // 返回一个字符串,它是通过b替换此字符串所有匹配的正则表达式得到的
    String s5 = "12hello34world5java7891mysql456";
    // hello,world,java,mysql
    System.out.println(s5.replaceAll("\\d+", ",").replaceAll("^,|,$", ""));
    // String replaceFirst(String regex, String b)
    // 返回一个字符串,它是通过b替换此字符串第一个匹配的正则表达式得到的
    // hello,world,java,mysql,
    System.out.println(s5.replaceAll("\\d+", ",").replaceFirst("^,|,$", ""));

    // boolean matches(String regrex)
    // 告知此字符串是否匹配给定的正则表达式
    System.out.println("12345".matches("\\d+"));  // true
    System.out.println("0571-4534289".matches("0571-\\d{7,8}"));  // true

    // String[] split(String regrex)
    // 根据给定正则表达式拆分此字符串
    String s6 = "  good    good study, day day up   ";
    // 去掉前后空格后用空格将字符串分开, \\s+ 会将多个空格看做一个
    String[] strs1 = s6.trim().split("\\s+");
    System.out.println(strs1.length);  // 6
    // String[] split(String regrex, int limit)
    // 根据给定正则表达式拆分此字符串, 最多不超过limit个, 如果超过了, 剩下的放到最后一个元素中
    String[] strs2 = s6.trim().split("\\s+", 3);
    System.out.println(strs2.length);  // 3


    System.out.println("-------------------------------------");
    System.out.println(Integer.parseInt("123"));  // String -> 基本数据类型/包装类
    System.out.println(Double.parseDouble("1.2e9"));  // String -> 基本数据类型/包装类
    System.out.println(String.valueOf(123));  // 基本数据类型/包装类 -> String
    System.out.println(123.1 + "");  // 基本数据类型/包装类 -> String
    // String -> char[]
    String s7 = "123abc";
    char[] chs = s7.toCharArray();
    System.out.println(Arrays.toString(chs));  // [1, 2, 3, a, b, c]
    // char[] -> String
    System.out.println(new String(chs));  // 123abc
    // String -> byte[]
    byte[] bs1 = s7.getBytes();  // 使用默认的字符集进行转化
    System.out.println(Arrays.toString(bs1));  // [49, 50, 51, 97, 98, 99]
    String s8 = "123abc中国";
    byte[] bs2 = s8.getBytes("gbk");  // 使用gbk进行编码
    System.out.println(Arrays.toString(bs2));  // [49, 50, 51, 97, 98, 99, -42, -48, -71, -6]
    // byte[] -> String
    System.out.println(new String(bs1));  // 123abc
    System.out.println(new String(bs2, "gbk"));  // 123abc中国
}

// StringBuilder/StringBuffer
@Test
public void test17() {

    // StringBuilder/StringBuffer和String相同的方法这里不演示了

    StringBuilder sb = new StringBuilder("abc");

    sb.append(1);
    sb.append('2');
    sb.append("345");
    System.out.println(sb);  // abc12345

    sb.delete(2, 4);
    System.out.println(sb);  // ab2345

    sb.replace(2, sb.length(), "hello");
    System.out.println(sb);  // abhello

    sb.insert(2, false);
    System.out.println(sb);  // abfalsehello

    sb.reverse();
    System.out.println(sb);  // olleheslafba

    String s = sb.substring(1, 3);
    System.out.println(s);  // ll
    System.out.println(sb);  // olleheslafba

    sb.setCharAt(0, 'a');
    System.out.println(sb);  // alleheslafba

    /**
     * 总结:
     * (1) 增:append(xxx)
     * (2) 删: delete(int start, int end)
     * (3) 改: setCharAt(int index, char ch) / replace
     * (4) 查: charAt(int index)
     * (5) 长度: length()
     * (6) 遍历: for (char c : sb.toString().toCharArray()) ...
     */
}

 常用正则表达式

Java正则表达式校验数字、字母及特殊字符_java数字正则表达式校验-CSDN博客

ArrayList

public void test01() {
    // 定义 ArrayList
    // 定义一个空 ArrayList
    List<Integer> a = new ArrayList<>();
    // 定义一个空 ArrayList,初始容量为3
    List<Integer> b = new ArrayList<>(3);
    // 定义一个包含元素1,2,3 的 ArrayList
    ArrayList<Integer> c = new ArrayList<>(Arrays.asList(1, 2, 3));

    // 遍历 ArrayList
    for (int i = 0; i < c.size(); i++) System.out.print(c.get(i) + " ");
    System.out.println();
    for (int x : c) System.out.print(x + " ");
    System.out.println();

    // 获取 ArrayList 第一个和最后一个元素
    System.out.println(c.get(0));  // 第一个元素:c[0]常用
    System.out.println(c.get(c.size() - 1));  // 最后一个元素

    // 在 ArrayList 尾部添加、删除元素
    c.add(4);
    c.add(0,4);//在0处插入4
    c.remove(c.size() - 1); //参数是index


    // 清空 ArrayList
    c.clear();
    System.out.println(c.size());  // 0

    //转成数组
    //String型的
    List<String> list=new ArrayList<String>();  
	list.add("a");  
	list.add("b");  
	list.add("c");  
	int size=list.size();  
	String[] array = (String[])list.toArray(new String[size]);  
    //非包装类型的
    ArrayList<Integer> al = new ArrayList<>();
    al.add(1);
    al.add(3);
    al.add(5);
    int[] arr = al.stream().mapToInt(k->k).toArray();

}
方法描述
add()将元素插入到指定位置的 arraylist 中
addAll()添加集合中的所有元素到 arraylist 中
clear()删除 arraylist 中的所有元素
clone()复制一份 arraylist
contains()判断元素是否在 arraylist
get()通过索引值获取 arraylist 中的元素
indexOf()返回 arraylist 中元素的索引值
removeAll()删除存在于指定集合中的 arraylist 里的所有元素
remove()删除 arraylist 里的单个元素
size()返回 arraylist 里元素数量
isEmpty()判断 arraylist 是否为空
subList()截取部分 arraylist 的元素
set()替换 arraylist 中指定索引的元素
sort()对 arraylist 元素进行排序
toArray()将 arraylist 转换为数组
toString()将 arraylist 转换为字符串
ensureCapacity()设置指定容量大小的 arraylist
lastIndexOf()返回指定元素在 arraylist 中最后一次出现的位置
retainAll()保留 arraylist 中在指定集合中也存在的那些元素
containsAll()查看 arraylist 是否包含指定集合中的所有元素
trimToSize()将 arraylist 中的容量调整为数组中的元素个数
removeRange()删除 arraylist 中指定索引之间存在的元素
replaceAll()将给定的操作内容替换掉数组中每一个元素
removeIf()删除所有满足特定条件的 arraylist 元素
forEach()遍历 arraylist 中每一个元素并执行特定操作

Map:键值对

无序不重复:HashMap

注意是key的值不重复。

import java.util.HashMap;
import java.util.Map;
public class Main {

    public static void main(String[] args) {
        HashMap<Integer, Integer> hash = new HashMap<>();
        // map 中插入、删除元素
        hash.put(1, 11); 
        hash.put(1, 11); 
        hash.put(2, 11); 
        hash.put(1, 33);//注意,此时key为1的值更新为33了,以最新的保存在map中。
        hash.put(3, 33);
        hash.remove(3);
        // 遍历 map,不能使用fori进行遍历
        for (Map.Entry<Integer, Integer> p : hash.entrySet()) System.out.print(p + "\t");
        System.out.println();
        for (int k : hash.keySet()) System.out.print(k + ":" + hash.get(k) + "\t");
        System.out.println();
        for (int v : hash.values()) System.out.print(v + "\t");  // 只遍历值
        System.out.println();
        // map 中判断某元素是否存在
        System.out.println(hash.containsKey(1));  // true
        // 清空 map
        hash.clear();
        System.out.println(hash.size());  // 0
        System.out.println(hash.isEmpty());  // true 
    }
}


1=33    2=11
1:33    2:11
33      11
true
0
true

 有序不重复:TreeMap

按key升序,key不重复。

import java.util.TreeMap;
import java.util.Iterator;
import java.util.Map;
public class Main {

    public static void main(String[] args) {
        TreeMap<Integer, Integer> a = new TreeMap<>();
        // map 中插入、删除元素
        a.put(1, 11); a.put(1, 11);a.put(3, 33); a.put(2, 11); a.put(1, 33);
        a.remove(4);
        // 返回第一个和最后一个元素
        System.out.println(a.firstEntry());  
        System.out.println(a.lastEntry());  
        System.out.println(a.firstKey());  // 没有 firstValue() !
        System.out.println(a.firstEntry().getKey());
        System.out.println(a.firstEntry().getValue());

        // 遍历 map,不能使用fori进行遍历
        for (Map.Entry<Integer, Integer> p : a.entrySet()) System.out.print(p + "\t");
        System.out.println();
        for (int k : a.keySet()) System.out.print(k + ":" + a.get(k) + "\t");
        System.out.println();
        for (int v : a.values()) System.out.print(v + "\t");  // 只遍历值
        System.out.println();
        Iterator<Map.Entry<Integer, Integer>> it = a.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Integer, Integer> e = it.next();
            System.out.print(e.getKey() + "~" + e.getValue() + "\t");
        }

        // map 中判断某元素是否存在
        System.out.println(a.containsKey(1));  // true
        // ceilingKey/higherKey
        System.out.println(a.ceilingKey(2));  // 返回大于等于 key为2的值 的最小元素
        System.out.println(a.higherKey(2));  // 返回大于key为2的值的最小元素
        // 补充:floorKey/lowerKey
        System.out.println(a.floorKey(3));  // 返回小于等于key为3的值的最大元素
        System.out.println(a.lowerKey(3));  // 返回小于key为3的值的最大元素
        
        // 清空 map
        a.clear();
        System.out.println(a.size());  // 0
        System.out.println(a.isEmpty());  // true 
    }
}

Map常用api(包括HashMap,TreeMap等): 

clear()从 Map 中删除所有映射
remove(Object key)从 Map 中删除键和关联的值
put(Object key, Object value)将指定值与指定键相关联
putAll(Map t)将指定 Map 中的所有映射复制到此 map
entrySet()返回 Map 中所包含映射的 Set 视图。Set 中的每个元素都是一个 Map.Entry 对象,可以使用 getKey() 和 getValue() 方法(还有一个 setValue() 方法)访问后者的键元素和值元素
keySet()返回 Map 中所包含键的 Set 视图。删除 Set 中的元素还将删除 Map 中相应的映射(键和值)
values()返回 map 中所包含值的 Collection 视图。删除 Collection 中的元素还将删除 Map 中相应的映射(键和值)
getOrDefault()获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
containsKey(Object key)如果 Map 包含指定键的映射,则返回 true
containsValue(Object value)如果此 Map 将一个或多个键映射到指定值,则返回 true
isEmpty()如果 Map 不包含键-值映射,则返回 true
size()返回 Map 中的键-值映射的数目

集合与数组相互转换

 List与数组

//一维
int[] arrays = list.stream().mapToInt((Integer i)->i).toArray();

//二维
List<int[]> merged = new ArrayList<int[]>();
//。。。。。。。。
int[][] res=merged.toArray(new int[merged.size()][]);

//String类型
String[] strs = (String[]) list.toArray(new String[0]);
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arrays));

//int[]转List
int[] data = {4, 5, 3, 6, 2, 5, 1};
        
// int[] 转 List<Integer>
List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList());
// Arrays.stream(arr) 可以替换成IntStream.of(arr)。
// 1.使用Arrays.stream将int[]转换成IntStream。
// 2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。
// 3.使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。

 List,Set,Map之间

new ArrayList<>(hashSet);
new HashSet<>(list);
new ArrayList<>(map.values());

位运算
一篇搞定位运算——java位运算详解_java 位运算 取第一个0_青癯的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_42265220/article/details/118386893

n&(n-1) 可以消去n最右边的1,也可以通过是否==0判断n是否是2的次方 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,STL(Standard Template Library)算法被称为Java集合框架(Java Collections Framework)。它提供了一组用于操作和管理数据的类和接口。Java集合框架包括以下主要接口和类: 1. Collection接口:是所有集合类的根接口,定义了集合类的基本操作,如添加、删除、遍历等。常见的实现类有List、Set和Queue。 2. List接口:继承自Collection接口,表示有序的集合,允许重复元素。常见的实现类有ArrayList和LinkedList。 3. Set接口:继承自Collection接口,表示无序的集合,不允许重复元素。常见的实现类有HashSet和TreeSet。 4. Queue接口:继承自Collection接口,表示队列,按照先进先出(FIFO)的顺序处理元素。常见的实现类有LinkedList和PriorityQueue。 除了上述基本接口和类外,Java集合框架还提供了一些其他的类和接口,用于特定的需求和场景,例如Map接口用于键值对的存储和操作,以及各种实现了Map接口的类如HashMap和TreeMap。 Java集合框架提供了丰富的算法和方法来操作集合数据,例如排序、查找、过滤等。常见的算法包括: 1. 排序算法Java集合框架提供了Collections类中的sort()方法,可以对List集合进行排序。常见的排序算法有冒泡排序、插入排序和快速排序等。 2. 查找算法Java集合框架提供了Collections类中的binarySearch()方法,可以在有序的List集合中进行二分查找。 3. 过滤算法Java集合框架提供了Stream API,可以使用filter()方法对集合进行过滤,根据指定的条件筛选出符合要求的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值