Java常用数据结构的常用方法

mac2025-01-12  46

注意:操作符(+ == !=)只能作用在基础数据类型上,唯一一个特例是String类,而且String还只能用+ 表示连接两个字符串成为一个 注意:只有基础类型才可以使用 双等号来比较两个值相等于否。其他类型虽然也可以用双等号 但是那是比较的地址。比较值的话还是要用equals().

HashMap

//构造函数HashMap();HashMap(Map m);给定Map对象 利用它老初始化HashMap;HashMap(int capacity);///构造函数结束var.containsKey(obj key):booleanvar.containsValue(obj value):booleanvar.get(key):valuevar.put(key, value):voidvar.getOrDefault(obj key, obj defaultValue):obj value//exists value or default value.//注意 这个方法并没有往hashmap中添加了新的键var.computeIfAbsent(key, reMappingFunction): remapping function can be a lamda expression like: k -> new LinkedList<>() or k -> 200*100var.putIfAbsent(key, value)the difference between previous three methods: https://stackoverflow.com/questions/48183999/what-is-the-difference-between-putifabsent-and-computeifabsent-in-java-8-mapvar.isEmpty():boolean;var.keySet():set;return set contains all keys,这个set可以用于直接for(obj key: var.keySet())式遍历var.values():Collection, and also can be used in for loop iteratorvar.remove(obj key): obj valuevar.remove(obj key, obj value):boolean//delete k-v pairvar.size():intvar.replace(obj key, obj value):void//if key exists, replace() is the same as put(), but when key did not exist, replace will do nothingvar.putAll(hash_map):void; 如果var是hashmap类型 就是深拷贝,如果var是map类型的 就是浅拷贝var.clone() //应该是浅拷贝 但是没有得到证明HashMap<Integer, Integer> copy = exist_hash_map; //是浅拷贝 大多数情况下我们需要的是深拷贝Map.Entry<Integer, Integer> entry : var.entrySet(); // transfer hashmap into set view in order to iterate it. example:for(Map.Entry<Integer, Integer> entry: indegree.entrySet()) { if(entry.getValue() == 0) queue.offer(entry.getKey()); }

HashSet(注意由于hashset的底层实现是基于hashmap的 因此很多方法都很相像)

var.size():intvar.isEmpty():boolvar.contains(key):bool //hashset中的key就是值var.add(key):bool;var.remove(key):booleanvar.clear():voiduse iterator OR for each to iterate HashSet:Iterator<String> itr = setOfStocks.iterator(); -while(itr.hasNext()){ System.out.println(itr.next()); }Read more: https://javarevisited.blogspot.com/2016/01/3-ways-to-loop-over-set-or-hashset-in-java.html#ixzz6Kix4OLLq

String

string的包装类 String.valueOf(Object obj): covert any obj to String

Integer

int的包装类

Integer.parseInt(String s): int //String-int转化器Integer.valueOf(int i): Integer //包装类的转换 Integer转换器Integer.valueOf(String s): Integer//注意 包装类是可以使用对象方法的 但是基本类型比如int就不行Integer.toString(int b): StringInteger.toBinaryString(int b): String. transfer a decimal integer to binary string. the string will start with a 1

BigInteger

this class is used for mathmatical operation which involoves very big integer calculations it has many calculation method.

Long

Long.parseLong(String str): Long;Long.toString(long b): String;Long.valueOf(long b): Long

String

var.length(): intvar.indexOf(“a”):intvar.charAt(int index): charvar.substring(int beginIndex): Stringvar.substring(int beginIndex, int endIndex): String //包括起始索引 不包括终止索引var.toCharArray(): char[]var.replace(char/String, char/String):Stringvar.replaceAll()var.toLowerCase():Stringvar.startsWith(String prefix): boolean;var.startsWith(String prefix, int start_index): boolean;var.trim():String //去掉字符两边的空白var.split(String regex, int limit): String[]//根据给定的正则表达式来拆分字符串,正则表达式所包含的字符有 . $ | *等等, 多个分隔符需要加|作为连字符。将正则表达符号转成普通字符需要用\。关于正则表达式的用法 详见其他文章。var1.equals(String var2):bool //不能直接用== 只有基础数据类型才能这样比较var1.compareTo(String var2):int //返回两字符串第一个不相同的字母之间的ascii码差值,如果完全相同 就返回0.这一方法同样适用于字符char与String的转换: String转化为char: var.charAt(index):char; 或者var.toCharArray():char[]; 而char或者char[]转化为String:String.valueOf(char c):String / String.valueOf(char[] chars): String; Character.toString(char c):String;

StringBuilder

var.append(String s): void / var.append(int i): void;var.delete(int start, int end): void;var.deleteCharAt(int index): voidvar.replace(int start, int end, String str);var.insert(int index, String s);上面是与String方法不同的 下面是与String 方法相同的:var.capacity();var.charAt(int index): char;var.indexOf(String str): intvar.length();var.substring(int start);var.toString():Stringvar.setLength(int newLength): void;

Character

其传入的参数应该是Character,但是可以将char类型自动转化为Character类型的

Character.isLetter(char a):boolean;Character.isDigit(char a):boolean;判断是否是一个数字字符Character.isWhitespace(char a):boolean;Character.isSpaceChar(char ch)Character.isTitleCase(int codePoint)Character.isUpperCase(char a)Character.isLowerCase(char a)Character.toUpperCase(char a):Character;Character.toLowerCase(char a)Character.toString(char a):String 返回字符的字符串形式 将单个字符转化为String类型Character.isLetterOrDigit(char ch): boolean

Array(Arrays)

Array只是能通过索引访问其中的元素 不能做任何排序之类的操作 但是Arrays类提供了以下方法

Arrays.binarySearch(int[] a, key):int;找到key在a中的索引并返回 相当于indexOf() 当然也不一定只是int数组 如果没有 返回(-(insertion point) – 1)Arrays.equals(int[] a, int[] b):bool;Arrays.fill(int[] a, int b):void;将b的值填充到a中Arrays.sort(int[] a):void;a将会被升序排列Arrays.sort(int[] a, int startIndex, int endIndex):void;Arrays.sort(int[] a, int startIndex, int endIndex, Comparator cmp);//如果想要按照自定义的方式去排序 具体操作见https://blog.csdn.net/eff666/article/details/63692840Arrays.toString(char[] c):String;把字符数组当对象传入,得到字符数组的字符串表示 or we can just use: new String(char[] c);Arrays.asList(Array a):List;Arrays.copyOfRange(nums1, 0, k); ArrayArrays没有向array中一个一个添加不同元素的方法 只能手动nums[0] = 2; nums[1]=3;等等System.out.println(Arrays.toString(arr)) //print 1D arraySystem.out.println(Arrays.deepToString(arr)) //print 2D array

ArrayList

List var = new ArrayList();有以下方法

var.add(obj o);向尾部添加元素var.add(int index,obj o);向指定index添加元素var.clear(); // pay attention to pass by value and pass by reference in Javavar.contains(obj o):boolean; //I didn’t really expect that we can using contains() in arraylist other than hashsetvar.equals(obj o):boolean;var.get(int index):obj o;var.indexOf(obj o):int index;var.lastIndexOf(obj o):int index;var.isEmpty():boolean;var.remove(int index); //注意 remove掉此元素之后 其后边所有元素都向前移动var.remove(obj o);移除列表中出现的首个指定元素 如果这个元素是个int 那么是如何知道这代表元素还是代表Index呢?https://www.geeksforgeeks.org/remove-element-arraylist-java/ 用 new Integer(int i)来生成objectvar.set(int index, obj o);用指定元素替换列表中指定位置的元素 只能在index存在的时候用于替换 否则就要用add方法var.size():intvar.subList(int startIndex, int endIndex);var.toArray():Object[] //List与Array的转化 Arrays.asList() . this method will return Object[] which is not the same as Integer[]Collections.sort(arrayList): void: use collection to sort arraylist

Stack

var.empty(); boolean;var.peek(): obj;var.pop(): obj;var.push():obj;var.search(obj element): index

Priority Queue

var.add()//插入元素var.remove(Object o);//删除某个元素var.poll()//删除头部元素var.peek()//查看头部元素var.contains(Object o): boolean;var.size(): int;var.toArray():Arrayvar.isEmpty();var.comparator(): Comparator;

Deque(interface) extends queue

add()/addLast() :tailpush()/addFirst()pop()/removeFirst():headremoveLast()offer()/offerLast():tailofferFirst()poll()/pollFirst():headpollLast()peek()/peekFirst():headpeekLast()List item

Queue(Interface)

var.add()var.remove()var.element(): //就像peek一样 但是在queue为空的时候 会抛出NoSuchElementExeception异var.offer();var.poll();var.peek();var.size();and since queue is a subtype of collections class, it inherits all the methods of it namely: isEmpty(), contains()…

List(Interface)

initialize:List a = new ArrayList();List b = new LinkedList();List c = new Vector();List d = new Stack();var.add(int index, Object O): void;var.remove(int index): Object;var.get(int index): Object;var.set(int index, Object new);var.indexOf(Object O);var.lastIndexOf(Object O);var.ListIterator()???vat.iterator()var.subList(int fromIndex, int toIndex): List;

LinkedList

this data structure can do anything using given method, and you can poll from back or head.

var.add(int index, E element); //相当于Insertvar.add(E e);var.addLast(E e):尾部添加元素var.addFirst(E e):头部添加元素var.clear();var.clone();var.contains();var.element(): peek the head of linked listvar.get(int index)/var.getFirst()/var.getLast();var.indexOf(Object o) ;var.offer(E e): add element to tail of linkedlist;var.peek():peek the head of linkedlist;var.peekFirst():peek the head of linkedlist;var.peekLast():peek the tail of linkedlist;;var.poll(): remove the head of linkedlist;var.pollFirst();var.pop()var.push();var.remove();remove the head of linkedlist;var.removeFirst():remove the head of linkedlist;//你没看错 remove跟removeFirst()var.set(int index, E element);var.size();var.toArray();var.isEmpty();

Iterators

three kinds of iterators: Enumeration, Iterator, ListIteratorEnumeration e = v.elements(); //where v is legacy classes(Vector, HashTable).e.hasMoreElements(): boolean; //if no more, then throws NoSuchElementExeceptione.nextElement(): Object;Iterator itr = c.iterator(); //c can be any Collection Object;itr.hasNext():bool;itr.next():Object;itr.remove(): void;ListIterator ilr = l.listIterator();// l is any List Objectl.hasNext(): booll.next(): Object;l.nextIndex(): int;l.hasPrevious(): boolean;l.previous(): Object;l.remove(): voidl.set(Object obj): void;l.add(Object obj);

Collections

Collections.sort(); //arraylist can be sorted in this wayCollection.max();Collection.binarySearch(list, target);

Random

var.nextInt(int upper_bound); return random 0~upperBound-1var.nextDouble(double upperBound);

System.out.println()

print an arraylist: System.out.println(list.toString());print an array: System.out.println(Arrays.toString(arr)); //many data structure have toString() method, however, due to the the sepcial of array, we use tool class of Array which is Arrays to implement those methods. and for other many data structures, the we can to Collections to print them, or there are defined toString method in its own class.

Math

Math.pow(): double. pay attention, it returns double, so be sure to convert type
最新回复(0)