算法考试

算法考试–各数据结构常用 方法总结

一、各种数据结构中很多方法是静态方法

静态方法和实例方法的调用:实例方法(普通成员方法),需要先new一个对象,再用 对象名.方法名() 的格式调用。 在外部调用静态方法,可以用 类名.方法名() 的形式,也可以用对象名.方法名().
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
调用本类内部的静态方法也是 类名.方法名(),或者 方法名() ,调用内部的静态方法,加不加类名都行。

二、场景

场景1

反转字符串: StringBuffer和StringBuilder中有reverse()方法,String没有.
String s = "abc"
1)String s1 = new StringBuffer(s).reverse().toString(); // 第一种,利用  reverse() 方法
2)  String reverse = ""; // 空串
for(int i = 0; i < s.length(); i++)
reverse = s.charAt(i) + reverse;
return reverse;
排序数组:Arrays.Sort(chars)  从小到大

场景2

三、各个数据结构的方法

1、字符串String

String s1 = "abcdefg",s2 = "ABC";

boolean flag = s1.equals(s2);  // 比较字符串内容是否相同,“==”比较的是两个字符串的引用是否相同。
boolean flag = s1.equalsIngoreCase(s2); // 不区分大小写,比较字符串内容是否相同。
int i = s1.compareTo(s2); // 比较两个字符串大小关系(字典序)。返回整形,相等返回0,小于返回负数,大于返回正数。

char[] chars = s1.toCharArray(); // 字符串转变成数组;
String s = Arrays.toString(chars);  // 数组转换为字符串;

boolean flag = s1.contains("abcdefg"); //字符串是否包含后面的字符串,
int i = s1.indexOf("def"); //  字符串中第一个索引
int i = s1.lastIndexOf("def"); // 字符串中最后一个索引
boolean flag = s1.startsWith("abc"); //  字符串是否以某字符串开头
boolean flag = s1.endsWith("fg"); //  字符串是否以某字符串结尾

String s2 = s1.replace("ab","hhh");  //把字符串中的所有ab替换为hhh
String s2 = s1.replaceFirst("ab","xxx" );  //把字符串中第一个ab替换为xxx

String str = "username=zhangsan&password=123";
String[] strs = str.split("&" | "=");   //字符串分隔为字符串数组,多个分隔符,可以用"|"作为连字符

String s =  str.substring(8); //截取字符串索引8后的字符
String s = str.substring(8,10);  //截取索引8到10之间的字符 [8,10)

String str1 = str.trim(); // 去掉字符串中的左右空格,保留中间空格
String STR = str.toUpperCase(); // 转换为大写
String str = str.toLowerCase(); // 转换为小写
String str2 = str.concat(str1); // 连接字符串 等同于“+”
String str2 = str + "abc";
int l = str.length(); // 取字符串长度
boolean flag = str.isEmpty(); // 字符串是否为空字符串“”,即长度是否为零,但不是判断是否为null

2、StringBuffer与StringBuilder

StringBuffer        StringBuilder
StringBuffer 是线程安全的,多线程的时候使用. StringBuilder 是线程不安全的单线程的时候使用.
String str = "abcdef";
StringBuilder sb = new StringBuilder(str); // string转换为StringBuilder
String s = sb.toString(); // StringBuilder 转换为string

StringBuffer sb = new StringBuffer("birds");
sb.append("abcdefgh");  // 在字符串末尾添加元素
sb.delete(0.2);  // 删除0和1两个下标的元素
sb.deleteCharAt(2) // 删除下标为2的字符
sb.replace(1,3,"0") // 把下标1和2的字符替换为"0"
sb.setCharAt(2,"0") // 把下标为2的字符替换为0
sb.insert(2,"我是新插入的字符串")  // 在下标2的位置,插入字符串
sb.reverse().toString()  //反转,把sb反转然后转换为字符串。
sb.substring(0,2) //截取字符串

StringBuilder 方法和StringBuffer差不多
insert append length() setCharAt toString reverse delete replace subString .....

3、数组 Arrays int[]

String[] s1 = new String[5];   //声明新数组, 长度为5
String[] s1 = {"a","b","c","d"} // 声明新数组并赋值
排序数组:Arrays.Sort(chars) // 从小到大
int[] a2 = a1.reverse(); // 反转数组顺序, 但是不排序
boolean flag = array1.equals(array2); //判断两个数组是否相等,这个感觉很强
String s = array1.toString();  //数组转换成字符串
for(int i : array1);  //遍历数组
int i = array1.binarySearch(6);  //在数组array1中查找 数字6 并返回下标; 没有就返回负数.从-1开始,可用来判断是否包含某个元素
boolean flag = Arrays.asList(array1).contains("a") //判断数组是否包含某个元素, 把数组转换为链表再用contains方法
List<String> list = Arrays.asList(array1); //数组转换为链表

int[] array2 = array1.clone();  //完全复制数组
int[] array2 = Arrays.copyOf(array1,6); //复制数组array1到新数组array2中并且新数组长度为6. 如果新数组长度小, 那只复制前面的部分
int[] array2 = Arrays.arraycopy(原数组, 原数组起始位置, 目标数组, 目标数组起始位置, 复制的元素长度); //复杂的数组复制

> Collection接口 分为List接口(ArrayList Linklist Vector) Set接口(HashSet 
> TreeSet) 常用方法:: add  addAll 删:chear remove  查:contains equals
> isEmpty size 遍历:for(int i : 目标)   链表 list是接口   ArrayList   LinkedList 这两个是实现.

4、ArrayList 和数组很像. 链表 list是接口 ArrayList LinkedList 这两个是实现.

List<String> list = new ArrayList<String> ();
list.add("Jack"); //在链表末尾添加元素
list.add(0,"Tom");  //在指定索引处添加元素
list.addAll(list2);  //在当前链表中添加另一个链表的元素

list.clear();  //清空集合中的全部元素
list.remove(2);  //删除集合中指定下标的元素
list.remove("Tom"); //删除集合中某个元素, 只删除第一个

list.set(2,"Marry");  //用指定元素替代制定下标处的元素

boolean flag = list.contains("Tom");  //判断集合中是否包含某个元素
boolean flag = list.isEmpty();  //判断元素是否为空
list.get(2); //返回指定下标处的元素
list.size(); //查询集合中元素的个数
list.indexOf("Tom"); //元素在集合中第一次出现的位置
list.toArray(); //把链表转换为数组

5、LinkedList

List list = new LinkedList<String>();
list.add("Tom");  //在链表最后添加元素
list.addFirst("Tom");  //在链表头部添加元素
list.add(2,"Marry");  //在指定位置插入元素

list.remove();  //删除链表中的第一个元素
list.remove("Tom");   //删除链表中的指定元素
list.remove(2);  //删除下标为2的元素

list.get(2);  //获取索引2的元素

6、Hashset 集合 Set是接口 实现HashSet TreeSet HashSet中不能保存重复的数据

HashSet
Set<String> set = new HashSet<String> ();
set.add("Jack");   //向集合中添加元素
set.addAll(set1);    //向集合中添加另一个集合的所有元素
set.remove("Jack");   //从集合中删除元素
set.removeAll();  // 清空集合

boolean flag = set.contains("Jack"); //判断集合是否包含某元素
boolean flag = set.isEmpty();  //判断set是否为空
set.size(); //集合中元素的个数
set.toArray(); //集合转变为数组

TreeSet  方法和HashSet基本一致. 是有序的.用的很少

7、键值对集合Map<K,V> 每个键只能对应一个值 而且键不能重复, 一般供HashMap就行

Map<String,String> map = new HashMap<String,String>();  //创建Map集合
map.put("语文","及格");
map.put("数学","优秀");  //添加键值对,如果键重复会覆盖
map.remove("语文");  //根据键删除键值对, 会返回被删除的键对应的值,如果没有键,就返回null。返回的值一般不要。
map.clear();  //清空所有键值对元素
int size = map.size(); //集合中键值对的数量

Map集合获取方法
String s = map.get("语文"); //根据键获取值,s为"及格"
Set<String> keySet = map.keySet(); //获取所有键的集合
Collection<String> values = map.values(); // 获取所有值的集合,注意这里是Collection

boolean flag = map.containsKey("语文");  //判断键里是否包含某个值
boolean flag = map.containsValues("及格");  //判断值里是否包含某个值
boolean flag = map.isEmpty();  //判断集合是否为空

8、栈 先进后出

Stack<Integer> stack = new Stack<>();
stack.push();  // 在栈顶入栈
stack.pop();  // 获取栈顶元素并删除
stack.peek();  // 获取栈顶元素不删除
stack.isEmpty();  // 判断是否为空
stack.search("Tom") //  判断栈中时候含有某个元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值