Java常用笔记

JAVA集合类ArrayList删除指定值元素

错误做法:

for(int i = 0, len = list.size(); i < len; i++){
if(list.get(i) == 1) {
list.remove(i);
}
}

因为删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常。

正确做法:

for(int i = 0, len = list.size(); i < len; i++){
if(list.get(i) == 1){
list.remove(i);
len--;
i--;
}
}
  • 更好的一个做法

List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。所以我们还有一个更好的做法是:

Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
int i = iterator.next();
if(i == 1){
iterator.remove();
}
}

比较、排序Comparator/Comparable

1.自定义的类后面需要按指定属性实现排序等操作

class Employee implements Comparable{
String name;
double salary;
public int compareTo(Employee other){
return Double.compare(this.salary,other.salary);
}
}

2.已有模板,定义排序顺序(最大堆、最小堆)

//先定义一个比较器
Comparator<Integer> cmp = new Comparator<Integer>(){
public int compare(Integer e1,Integer e2){
return e1 - e2;//最小堆,默认
//return e2-e1;最大堆
}
};
PriorityQueue<Integer> heap = new PriorityQueue(cmp);

Long型数据:

Comparator<Long> cmp = new Comparator<Long>(){
public int compare(Long e1,Long e2){
return Long.compare(e1,e2);
}
};
PriorityQueue<Long> heap = new PriorityQueue(cmp);

string和int相互转化

string转int

  1. int i = Integer.parseInt(String s);
  2. int i = Integer.valueOf(String s).intValue();

int转string

  1. String s = String.valueOf(i);
  2. String s = Integer.toString(i);
  3. String s= “”+i;