泛型
- 泛型:标识着集合中存储元素的数据类型
- 写法:<数据类型>
- 泛型类声明位置:类名<泛型>
- 泛型类中创建对象时,会给泛型赋值类型
一个类中有多个泛型,需要在方法上进行泛型声明,这个泛型将会在该方法被调用时被赋值
好处:
1.保证数据的安全性(提示方法中传入参数类型)
2.避免进行向下转型(类型强转)
3.将运行时的错误 转化编译时报错创建一个集合带有泛型
ArrayList<String> list = new ArrayList<String>();
注意:前后泛型的类型要一致或者不填后面的,不填后面的话默认前后一致.
- 泛型 ? extends E 相当于?是E的子类或者本类,可以限定参数的类型(向下限定)
ArrayList<Person> list1 = new ArrayList<>();
list1.add(new Person("东东", 11));
ArrayList<Student> list2 = new ArrayList<>();
list2.add(new Student("西西", 22));
// addAll(Collection ? extends E)
// E list1的泛型
// ? list2的泛型
list1.addAll(list2);
System.out.println(list1);
- 泛型接口,泛型类型在接口的实现类上确定
interface InterA<G>{
public abstract void fun (G g);
}
// 泛型类型可以在接口的实现类上确定
class InterAImpl implements InterA<String>{
@Override
public void fun(String g) {
}
- 创建泛型类的对象
Worker<String> worker = new Worker<>();
- 多参数方法 int …num
1.传入多个值用逗号隔开
2.直接传入数组也行
public static void print(int ... num) {
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
注意::多参数要放在方法参数列表的最后一个
- Arrays.asList可以将数组转成集合
String[] strings = {"东东","南南","西西"};
List<String> list = Arrays.asList(strings);
System.out.println(list);
注意:该方法转完集合后,不能对集合进行长度修改.
- 迭代器删除
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("b");
// 迭代器删除
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
if (str.equals("b")) {
// 删除(使用迭代器的删除方法)
iterator.remove();
}
}
System.out.println(list);
输出: a
- For循环删除
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("b");
// 循环删除 "b"
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("b")) {
list.remove(i--);
}
}
System.out.println(list);
输出: a
- Collections.swap集合工具类提供的交换方法
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("东东", 20));
list.add(new Student("西西", 19));
list.add(new Student("北北", 21));
list.add(new Student("南南", 18));
list.add(new Student("中中", 22));
// 冒泡排序法
for (int i = 0; i < list.size()-1; i++) {
for (int j = 0; j < list.size()-1-i; j++) {
// 取出要比较的两个学生
Student s1 = list.get(j);
Student s2 = list.get(j +1 );
if (s1.getAge() < s2.getAge()) {
// 集合工具类 提供的 交换方法
Collections.swap(list, j, j+1);
}
}
}
System.out.println(list);
Set集合
- 特点:
- 无序
- 无下标
- 不重复(系统每创建一个对象,都会为这个对象分配一个 hashCode值.当向HashSet集合中保存对象时,系统会先比较HashCode值是否相同.
相同:
会调用对象的equals方法进行比较,如果equals方法比较也相同,那么就不存.
不相同:
如果HashCode不相同,相对于不是一个对象,直接把该对象存入集合中(也不会调用equals方法)