public class SetList {
public static void main(String[] args) {
Set<Integer> set =new TreeSet<Integer>();
List<Integer> list=new ArrayList<Integer>();
for(int i=-3;i<3;i++){
set.add(i);
list.add(i);
}
for(int i=0;i<3;i++){
set.remove(i);
list.remove(i);
}
System.out.println(set+" "+list);
}
}
输出结果为[-3, -2, -1] [-2, 0, 2]
原因是set.remove(i)调用了重载方法remove(E);
而list.remove(i)调用的是重载方法remove(int i).
还有这段代码都是重载惹的祸!
public class CollectionClassifier {
public static String classify(Set<?> s){
return "Set";
}
public static String classify(List<?> lst){
return "List";
}
public static String classify(Collection<?> c){
return "Collection";
}
public static void main(String[] args) {
Collection<?>[] collections={
new HashSet<String>(),
new ArrayList<Bigram>(),
new HashMap<String,String>().values()
};
for(Collection<?> c:collections){
System.out.println(classify(c));
}
}
}
本文摘自Effective Java中文版第二版!
分享到:
相关推荐
这样做的好处是灵活性高,但需要注意的是,使用完数组后必须用`delete`释放内存,防止内存泄漏。 接下来,我们将探讨如何实现这些基本的矩阵运算: 1. **矩阵加法**:两个矩阵相加,要求它们的维度相同。重载"+...
(1)输人并运行所给的参考程1,并将程序中的注释部分也输人计算机,体会和理解程序...(5)使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。 (6)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。
2. 友元函数重载:当操作符需要访问类的私有或保护成员,或者需要保持中立操作(例如赋值运算符)时,可以使用友元函数。例如: ```cpp class Matrix { private: int* data; int rows, cols; friend Matrix ...
正确地重载运算符需要注意以下几点: (1) 一元操作符: - 一元操作符如++和--需要特别注意其前缀和后缀形式。前缀操作符通常会改变对象状态,因此通常返回非const的*this引用;而后缀操作符则通常返回一个const...
### 运算符重载和函数重载 ...此外,还熟悉了构造函数重载以及拷贝构造函数的使用,这些都是编写高质量、可维护代码的关键技能。通过实际编码和调试,可以更深入地理解这些概念,并学习如何有效地管理内存和资源。
在C++编程中,运算符重载是一种强大的特性,它允许程序员为自定义类型赋予与内置类型相似的操作方式。...通过理解并遵循这些规则,你可以有效地重载运算符,使得自定义类型在使用时具有直观和一致的行为。
Lua 热重载机制是程序开发中的一种实用特性,它允许程序员在...然而,正确实现热重载需要对 Lua 的运行机制有深入的理解,并注意其限制和潜在问题。在实际应用中,开发者应根据项目需求和环境选择合适的热重载方案。
运算符重载是C++语言中的一项重要特性,它允许开发者为用户自定义的数据类型(如类)赋予标准运算符新...然而,需要注意的是,过度使用或不恰当的运算符重载可能会使代码变得难以理解和维护,因此在使用时应谨慎考虑。
3. **考虑const和引用**:为了保持一致性,重载函数通常需要考虑是否为const成员函数,并使用常量引用作为参数,以避免不必要的拷贝。 4. **优先级和结合性**:重载操作符不会改变其原有的优先级和结合性,这意味着...
每个运算符都有其特定的重载规则和注意事项。例如,赋值运算符通常需要遵循“右值引用返回”原则,以支持连续赋值(如`a = b = c`)。 在实际应用中,运算符重载可以极大地提高代码的易读性。例如,如果你定义了一...
注意使用`setw`来保持输出格式的整齐。 #### 四、代码分析 ```cpp #include #include // 定义排序两个整数的函数 void paixu(int &a, int &b) { int t; if (a > b) { t = a; a = b; b = t; } cout (8) ; } ...
当我们在服务中重载这些方法时,我们需要确保每个重载的方法具有独特的消息合同,因为WCF是基于SOAP协议的,而SOAP不支持方法重载。 在标题中的“WCF契约重载”,我们可能看到的是通过不同参数列表或返回类型来重载...
安川变频器H1000重载高性能变频器快速使用指南 一、变频器概述 安川变频器H1000是高性能变频器,具有高精度的速度控制和强大的 TORQUE control功能,能够满足各类工业应用的需要。该变频器具有内置起重专用模式,...
在实践中,要特别注意保持运算符重载的一致性和自然性,确保其行为符合用户的直觉,以增强代码的可读性和可维护性。在VS2010环境下,你可以编写、编译和运行代码,观察运算符重载的效果,加深对这一概念的理解。
注意,后置自增需要创建一个临时对象来保存原始值,因为它的返回值是自增前的值。 总的来说,通过指针实现运算符重载是C++中增强类型功能的一种强大工具。它可以让我们在自定义类上使用熟悉的运算符,提高代码的...
函数重载是面向对象编程中的一个关键特性,它允许在同一个作用域内使用相同的名字定义多个函数,但这些函数的参数列表必须有所不同。这通常通过改变参数的数量、类型或者参数的顺序来实现。函数重载使得程序员可以为...
1. **函数名称的一致性**:尽管函数重载允许使用相同的名称,但在定义多个重载函数时,应确保它们的功能相似,以便于理解。 2. **避免混淆**:在实际开发中,如果重载的函数功能相差很大,可能会导致代码难以理解和...
2. **返回类型不作为判断依据**:在进行方法重载时,即使返回类型不同,只要参数列表相同,也不会被认为是重载。 3. **访问修饰符的影响**:方法的访问修饰符(如public、private等)对是否构成重载没有直接影响。 4...
在某些情况下,友元函数可能更适合于运算符重载,特别是在处理需要访问私有数据的二元运算符时。例如: ```cpp class PrivateData { private: int data; friend PrivateData operator+(const PrivateData& a, ...
在实际开发中,需要注意的是,操作符重载应当保持一致性和合理性,确保它们的行为符合用户预期。例如,如果`Vector2D`类代表物理中的向量,那么`+=`操作符应该遵守向量加法规则,而不是随意改变其含义。 总之,`+=`...