一些Java使用中的技巧
泛型:
-
泛型是指“参数化类型”。参数,在定义方法时有形参,然后调用此方法时传递实参。参数化类型就是将具体类型参数化(类型参数),在使用时传入具体的类型(类型实参)。
List<String > list = new ArrayListString>(); list.add("abcdefg"); list.add("helloworld"); list.add(100); //会出错,因为在定义list变量的时候定义了型参<String>
循环数组:
-
可以直接对于数组中的元素进行循环遍历,可以不用重新定义索引来循环数组。
int[] nums = {1,2,3}; for (int e : nums) { System.out.println(e); }
合并数组:
-
可以使用arraycopy。
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
HashMap与HashSet
- HashMap的一些使用方法:
- 定义:
HashMap hm = new HashMap();
- 增加操作:
hm.put(a, b);
- 检查是否存在:
hm.containsKey(someKey);
- 删除操作:
hm.remove(someKey);
hm.putIfAbsent(key, value);
如果HashMap中无对应键值,则存入map;如果HashMap中存在相应键值,则返回value值。hm.getOrDefault(key, defaultValue);
如果存在key的映射,则返回value值;如果没有key的映射,则将value赋值为defaultValue。
- 定义:
- HashSet的一些使用方法:
- 定义:
Set hs = new HashSet< Type >();
- 增加操作:
hs.add(a);
set类中的add方法有返回值,返回值类型为boolean,返回结果为set中是否存在元素。 - 检查是否存在:
hs.contains(someKey);
- 删除操作:
hs.remove(someKey);
- 定义:
- 定义long型最大和最小值:Long.MAX_VALUE, Long.MIN_VALUE。
ArrayList
- 是实现List接口的动态数组,相对于传统的数组,ArrayList的长度可变,是一种动态的数组。一些方法如下:
List arraylist = new ArrayList(); //构造函数
arraylist.add(); //新增元素
arraylist.addAll(Collection <? extends E> c);
按照指定collection的迭代器返回元素顺序,将collection中的所有元素添加到此列表的尾部。arraylist.set(int index, E element);
用指定的元素替代此列表中指定位置上的元素。arraylist.remove(int index);
删除此列表中指定位置上的元素。arraylist.removeRange(int fromIndex, int toIndex);
移除列表中索引在fromIndex(包括)和toIndex(不包括)之间的所有元素。arraylist.get(int index);
查找元素
HashMap的遍历:
-
方法一:在for-each循环中使用entries来遍历(在键值都需要使用时)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key= " + entry.getKey() + ", Value=" + entry.getValue()); }
-
方法二:在for-each循环中遍历keys或values。(该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净)。
//遍历map中的键 for (Integer key : map.keySet()) { System.out.println("Key = " + key); } //遍历map中的值 for (Integer value : map.values()) { System.out.println("Value = " + value); }
-
方法三:使用Iterator遍历:
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry< Integer, Integer > entry = entries.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); }
排序:
- 对数组进行排序:
Arrays.sort(int[] nums);
- 对字符串数组的排序:
Arrays.sort(String[] string);
对字符串数组排序,得到的结果有如下特点:(1)字符串按照字母表的顺序排列(长词在短词之后);(2)按照字典顺序(lexicographical )排列。 - 对集合排序:
Collections.sort(list);
-
集合Collections中sort方法通过对comparator接口的实现来完成,代码如下:
Collections.sort(list, new Comparator<Object>() { public int compare(Object o1, Object o2) { myClass mc1 = (myClass) o1; myClass mc2 = (myClass) o2; if (mc1.val > mc2.val) return 1; //前者大于后者 else if (mc1.val < mc2.val) return -1; //后者大于前者 else return 0; //一样大 } });
复制数组:
int[] temp = nums.clone();
直接在数组对象上使用clone()方法即可。
在遍历中比较数组前后位元素:
- 当遍历数组的时候,如遇到需要比较前后位的情况,若直接在遍历的过程中查看i+1或者i-1会引发超出数组索引的错误。因此使用prev或者next变量来记录遍历元素的前后位。
Java基本数据类型转换:
在Java中,整数类型(byte/short/int/long)中,对于未声明数据类型的整形,其默认类型为int型。在浮点类型(float/double)中,对于未声明数据类型的浮点型,默认为double型。
-
隐式类型转化:隐式转换也叫作自动类型转换, 由系统自动完成。从存储范围小的类型到存储范围大的类型。
byte ->short(char)->int->long->float->double
-
显示类型转换(强制转换):
如上图所示:需要将a赋值给b并且进行强制转化。因为a在此处是变量,而且需要将存储范围大的类型转换为存储范围小的类型,所以需要用到强制转换。
Integer和int的区别:
- int是基本的数据类型;
- Integer是int的封装类;
- int和Integer都可以表示某一个数值;
-
int和Integer不能够互用,因为他们两种不同的数据类型;
举个例子:当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装object的,这是就需要这些内建类型的外覆类了。 Java中每种内建类型都有相应的外覆类。
Stack的一些用法:Stack API
- 堆是一种先进后出的数据结构,用push和pop存储数据。
stack.push(E item);
存入数据;stack.pop();
取出数据;stack.empty();
检测堆是否为空,返回boolean类型;stack.peek();
查看堆顶元素,不取出;stack.search();
String
StringBuffer & StringBuilder:
- Java.lang.StringBuffer是线程安全的可变字符序列。
- java.lang.StringBuilder是一个与StringBuffer兼容的API,但不保证同步,建议在单线程中使用。
- stringbuilder.append(‘a’);
- stringbuilder.insert(4, ‘a’);</em>
String类的一些内建函数
- 参考Java API:String Class API.
split("ReguExp");
根据正则表达式对字符串进行分割。substring(int beginIndex, int endIndex);
根据开始和结束位置取得子字符串,结束位置到endIndex-1终止。toCharArray();
将字符串转换为char类型的数组。trim();
去掉字符串前端和后端的空白部分。indexOf(String str);
如果参数字符串是查询字符串的prefix,则返回第一次出现的位置。contains(CharSequence s);
字符串中含有制定字符时返回真,否则返回假。
Character
Character类的一些内建函数
- 参考Java API:Character Class API.
isAlphabetic(int codePoint);
检查一个字符是否为字母。isDigit(char ch);
检查是否为数字。isLetterOrDigit(char ch)
检查是否为字母数字字符。toLowerCase(char ch)
转换为小写。
Arrays
Arrays类的一些内建函数
- 参考Java API: Arrays Class API.
binarySearch(int[] a, int key);
二分查找,如果找在数组中找到对应元素,则返回索引值;如果没有找到对应元素,返回插入值,(-(insertion point) - 1)
。equals(char[] a, char[] b);
如果两字符数组相等,则返回真。