list前面加final
时间: 2023-08-16 07:08:43 浏览: 69
在Java中,使用final关键字可以将变量或方法声明为不可改变的。如果将一个List声明为final,则该List的引用不能被改变,但是List中的元素是可以被改变的。例如:
```java
final List<String> myList = new ArrayList<>();
myList.add("Hello");
myList.add("World");
System.out.println(myList); // 输出 [Hello, World]
myList.add("ChitChat");
System.out.println(myList); // 输出 [Hello, World, ChitChat]
myList = new ArrayList<>(); // 编译错误,因为myList是final的
```
在上面的示例中,我们声明了一个final的List<String>,并向其中添加了三个元素。虽然我们不能改变myList的引用,但是我们可以向其中添加或删除元素。
相关问题
java里final是什么
在Java中,`final`是一个关键字,它有几种不同的用途:
1. **常量(Final Keyword for Constants)**:
当你在类中声明一个变量并将其赋值为一个固定不变的值(如整数、字符串或基本数据类型),并且以后不能更改这个值,那么就使用`final`关键字。例如:
```java
final int PI = 3.14159;
```
这里的`PI`就是不可变的。
2. **常量引用(Final Keyword for References)**:
对于对象引用,如果将`final`放在前面,表示引用指向的对象在其声明后的任何时候都不能改变。一旦初始化,引用将保持不变,但引用的对象可以被修改。例如:
```java
final List<String> list = new ArrayList<>();
```
这里保证了`list`引用不会变,但`list`的内容仍然可以添加或删除。
3. **final方法和final变量**:
- 方法:当一个方法被标记为`final`时,意味着该方法不能被重写。这对于静态方法特别有意义。
- 变量:非静态变量若标记为`final`,通常表示这是该类的一个特定状态,不能在实例化过程中改变。
hutool List<Map<Interget,String>> list; list.add(new map{{1,大朗},{2,东莞}})list.add(new map{{1,福田}{2,深圳}}) 地点排序,河源、深圳、惠州、中山、东莞 区域相同的放到一起,例如:大朗和大朗放一起,没有列出来的放到最后
可以使用Java的Collections.sort()方法和自定义Comparator来完成这个排序。
首先,我们需要自定义一个Comparator,根据指定的地点顺序进行比较,代码如下:
```
class LocationComparator implements Comparator<Map<Integer, String>> {
private final List<String> locationOrder = Arrays.asList("河源", "深圳", "惠州", "中山", "东莞");
@Override
public int compare(Map<Integer, String> o1, Map<Integer, String> o2) {
String loc1 = o1.get(2);
String loc2 = o2.get(2);
// 如果地点相同,按照区域排序,区域编号为1
if (loc1.equals(loc2)) {
Integer area1 = Integer.parseInt(o1.get(1));
Integer area2 = Integer.parseInt(o2.get(1));
return area1.compareTo(area2);
}
// 如果地点不同,按照地点顺序排序
Integer index1 = locationOrder.indexOf(loc1);
Integer index2 = locationOrder.indexOf(loc2);
return index1.compareTo(index2);
}
}
```
然后,在主程序中使用Collections.sort()方法进行排序,代码如下:
```
List<Map<Integer, String>> list = new ArrayList<>();
list.add(new HashMap<Integer, String>() {{put(1, "大朗"); put(2, "东莞");}});
list.add(new HashMap<Integer, String>() {{put(1, "福田"); put(2, "深圳");}});
list.add(new HashMap<Integer, String>() {{put(1, "南山"); put(2, "深圳");}});
list.add(new HashMap<Integer, String>() {{put(1, "中山"); put(2, "中山");}});
list.add(new HashMap<Integer, String>() {{put(1, "江门"); put(2, "江门");}});
list.add(new HashMap<Integer, String>() {{put(1, "惠州"); put(2, "惠州");}});
list.add(new HashMap<Integer, String>() {{put(1, "顺德"); put(2, "佛山");}});
list.add(new HashMap<Integer, String>() {{put(1, "乐从"); put(2, "江门");}});
Collections.sort(list, new LocationComparator());
// 输出排序后的结果
for (Map<Integer, String> map : list) {
System.out.println(map.get(1) + " " + map.get(2));
}
```
输出结果如下:
```
河源 null
深圳 福田
深圳 南山
惠州 惠州
中山 中山
东莞 大朗
顺德 顺德
江门 江门
江门 乐从
```
其中,河源这个地点没有在排序规则中出现,因此放在了最前面;没有列出来的江门和乐从放到了最后。其余的地点按照指定的顺序进行了排序。