Java刷题常用集合类以及函数总结


前言

平时刷题都是拿C/C++的,现在记录一下使用java刷题需要记住的常用集合类以及函数。

一、Java集合类

java中的集合类放在java.util包下,所有的集合类主要是从Collection和Map这两个接口派生出来的,所有集合都是List、Queue、Set、Map这四个接口的实现类。
在这里插入图片描述

1.1 Collection接口

Collection接口的常用通用方法:

  • int size() 求出集合中元素的个数
  • boolean add(E e) 向集合中插入一个元素
  • boolean addAll(Collection<? extends E> c) 向集合中插入一组元素
  • void clear() 清空集合中的元素
  • contains(Object o) 查找一个元素是否存在
  • boolean containsAll(Collection<?> c) 查找一组元素是否存在
  • boolean isEmpty() 判断集合是否为空
  • Iterator iterator() 为 Iterator接口实例化
  • boolean remove(Object o) 从集合中删除一个对象
  • Object[] toArray() 以对象数组的形式返回集合中的全部内容
  • T[] toArray(T[] a) 指定操作的泛型类型.并把内容返回
List<String> tmp = new ArrayList<>();
String ans = tmp.toArray(new String[tmp.size()])

 List<String[]> arr= new ArrayList<>();
 String[][] ans = arr.toArray(new String[arr.size()][])

1.1.1 List

List中除了Collection接口中的额外方法:

  • void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
  • E get(int index):返回集合中指定位置的元素。
  • E remove(int index):移除列表中指定位置的元素, 返回的是被移除的元素。
  • E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
1.1.1.1 ArrayList类
ArrayList<Integer> list = new ArrayList<Integer>();
1.1.1.2 LinkedList类
 LinkedList<String> link = new LinkedList<String>();

LinkedList 特有方法(擅长首尾操作):

  • void addFirst(E e)/addLast(E e):将指定元素插入此列表的开头/结尾。
  • E getFirst()/getLast():返回此列表的第一个元素/最后一个元素。
  • E removeFirst()/removeLast():移除并返回此列表的第一个元素/最后一个元素。
  • E pop():从此列表所表示的堆栈处弹出一个元素。
  • void push(E e):将元素推入此列表所表示的堆栈。

1.1.2 Queue

Queu中除了Collection接口中的额外方法:

  • boolean offer(E e):add()和offer()都为增,队列满时add()抛出异常,offer()返回false
  • E poll():remove()和poll()都为删,队列空时remove()抛出异常,poll()返回Null
  • E element();E peek():获得队首元素,队列空时element()抛出异常,peek()返回Null
1.1.2.1 Deque

双端队列,可模拟栈

Deque<Integer> dq = new LinkedList<Integer>();//频繁的插入、删除操作的时候使用
Deque<Integer> dq = new ArrayDeque<Integer>();//频繁的随机访问操作使用,不支持null

作为栈时的函数:

  • push(E):栈顶添加元素
  • pop():栈顶弹出
  • peek():栈顶元素
1.1.2.2 PriorityQueue
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();//小顶堆,默认容量是11
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(11,new Comparator<Integer>(){
		public int compare(Integer a,Integer b){
			return b - a;
		}
});//大顶堆,比较函数可通过定义类、匿名类或者Lambda表达式实现

1.1.3 Set

 Set<String> set = new HashSet<>();
 Set<String> set = new TreeSet<>();

floor(E e) :方法返回在这个集合中小于或者等于给定元素的最大元素,如果不存在这样的元素,返回null.
ceiling(E e): 方法返回在这个集合中大于或者等于给定元素的最小元素,如果不存在这样的元素,返回null.

1.2 Map接口

常用方法:

  • void put(Object key,Object value):将指定的值与映射中的指定键关联
  • Object get(Object key):返回指定键所映射的值,如果此映射不包含该键的映射关系,则返回null
  • Object getOrDefault(key,val):如果没有该key的话返回默认值
  • boolean containsKey(Object key)//如果此映射包含指定键的映射关系,则返回true
  • boolean containsValue(Object value)//如果此时映射将一个或多个键映射到指定值,则返回true
  • Set keySet()//返回此映射中包含的值的Set视图
  • Collectionvalues()//返回此映射中包含的值的Collection视
  • Set<Map.Entry<K,V>>entrySet()//返回此映射中包含的映射关系的Set视图
  • Collection values( )😕/返回此映射中包含的值的 Collection 视图。
HashMap<Integer, Integer> mp=new HashMap<>();
mp.put(1, 2);
Set<Integer> set=mp.keySet();
Iterator<Integer> iterator=set.iterator();
while(iterator.hasNext()) {
	int idd=iterator.next();
	int val=mp.get(idd);
}
Set<Map.Entry<Integer,Integer> entries = map.entrySet();//建议使用此种遍历
for(Map.Entry<Integer,Integer> entry:entries ){
	int id = entry.getKey();
	int val = entry.getValue();
}

TreeMap:
TreeMap<Integer,Integer> mp = new TreeMap<Integer,Integer>();//注意,前面必须是TreeMap
ceilingKey(K key):返回大于或等于给定键的最小键,如果没有这样的键,则null
floorKey(K key):返回小于或等于给定键的最大键,如果没有这样的键,则null

二、String

String 中的常用函数

  • int length():返回此字符串的长度。
  • isEmpty():判断字符串是否为空。
  • char charAt(int index):返回指定索引处的 char 值。
  • int compareTo(String anotherString):按字典顺序比较两个字符串。相等返回0。
  • boolean equals(Object anObject):比较两个字符串是否相等
  • int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
  • String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
  • String substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串的一个子字符串(不包括endIndex)。
  • String toLowerCase():使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
  • String trim():返回字符串的副本,忽略前导空白和尾部空白。
  • Object.toString(): 对象转成字符串
  • String.valueOf():数字转成字符串
  • isNumber(String)😕/判断字符串是否是数字
  • Integer.parseInt(s)、Long.parseLong(s):字符串转成数字
  • char[] arr = str.toCharArray();//字符串转字符数组
  • String s = new String(arr);//字符数组转字符串

2.1 StringBuffer

  • append(b):添加字符串
  • charAt(1):返回指定索引的char字符
  • delete(int start ,int end):删除此序列的子字符串中的字符。
  • deleteCharAt(int index):删除此序列指定位置的字符。
  • reverse();反转字符串
StringBuffer s1=new StringBuffer();

三、Collection工具类和Arrays工具类

3.1 Collection工具类

ArrayList<Integer>arrayList = new ArrayList<Integer>();
Collections.reverse(arrayList);//反转
Collections.shuffle(arrayList);//随机排序
Collections.swap(arrayList,1,3);//交换位置
Collections.sort(arrayList, new Comparator<Integer>() {
    public int compare(Integer integer, Integer t1) {
           return t1.compareTo(integer);
       }
});//定制排序,由Comparator控制排序逻辑
Collections.max(arrayList)//最大值
Collections.frequency(arrayList,1);//统计1出现的次数
Collections.binarySearch(arrayList,1);//二分查找、返回索引

3.2 Arrays工具类

 int a[] = {100, 2, 3, 4, 5, 6, 7, 8, 9, 11};
 Arrays.sort(a);//排序
 Arrays.binarySearch(e, 4);//二分查找,如果数组中存在该元素,则会返回该元素在数组中的下标,如果不存在,返回 -(插入点 + 1)
 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly"); //转成链表
 

四、输入输出

import java.util.*;
public class Main{
    public static void main(String[] Args){
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        while(in.hasNext()){
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(a+b);
        }
    }
}

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//第一行读取一个数字,表示数组长度
        in.nextLine();//数字和字符串,需要吸收掉最后的换行
        String[] strs = new String[n];
        for(int i=0;i<n;i++){
            strs[i] = in.next();
        }
    }


    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextLine()){
            String str = in.nextLine();//直接读取一行
            String[] arr = str.split(" ");//分隔符分开
            Arrays.sort(arr);
        }
    }

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值