java集合与泛型_java基础之集合与泛型

一、集合与数组的区别

数组:长度固定,能存储基本数据类型和对象

例:int[] arr1 = new int[10]

Student[] arr2 = new Student[10]

集合:长度可变,只能存对象,而且对象的类型可以不一致

二、集合的体系图

3d43e27738e78afff85b8cf6109266fc.png

collect集合的父接口中的常用方法:

1、 public boolean add(E e) :把给定的对象添加到当前集合中

2、public void clear() :清空集合中所有的元素

3、public boolean remove(E e) : 把给定的对象在当前集合中删除

4、public boolean contains(E e) : 判断当前集合中是否包含给定的对象

5、public boolean isEmpty() : 判断当前集合是否为空

6、public int size() : 返回集合中元素的个数

7、public Object[] toArray() : 把集合转换成数组

8、public Iterator iterator() : 获取迭代器实现类对象,用来遍历集合中的元素的

迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个

元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出

Iterator接口的常用方法:

a、public boolean hasNext() :如果仍有下一个元素可以迭代,则返回 true

b、public E next() :返回迭代的下一个元素

c、default void remove():移除元素

list集合:有索引、可以存储重复元素且有序

该集合的实现类:

ArrayList:底层是一个数组实现的,查询快,增删慢,默认扩充为原来的1.5倍,但线程不安全

vector:底层是一个数组实现的,查询和增删都很慢,默认扩充为原来的2倍,但线程安全,因为使用了synchronized关键字

LinkeList:底层是一个链表实现的,查询慢,增删快

set集合:无索引,不可以存储重复元素且无序

该集合的实现类:

HashSet:底层是哈希表+(红黑树实现的),无索引,不可以存储重复元素且无序

linkeHashSet:底层是哈希表+链表实现的,无索引,不可以存储重复元素,但可以保证存储顺序

TreeSet:底层是使用二叉树实现的,一般用于排序

三、 迭代器的原理

d407349de3163249deebd339da6cbded.png

四、增强for

public class CollectionTest {

public static void main(String[] args) {

Collection cl = new ArrayList<>();

cl.add(new Person(1,"秦问天",12));

cl.add(new Person(2,"莫倾城",15));

cl.add(new Person(3,"青儿",16));

cl.add(new Person(4,"幽篁",18));

List ids = cl.stream().map(n->n.getId()).collect(Collectors.toList());

Iterator id = ids.iterator();

while(id.hasNext()){

System.out.println(id.next());

}

System.out.println("....增强for....");

for (Integer personId : ids) {

System.out.println(personId);

}

}

}

五、 泛型:可以在类或方法中预支地使用未知的数据类型

注意:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。

使用泛型的好处:

a、将运行时期的ClassCastException,转移到了编译时期变成了编译失败。

b、避免了类型强转的麻烦。

泛型的使用与定义

a、泛型类:在创建对象的时候确定泛型

定义格式:修饰符 class 类名 { }

例子:

public class GenericityClass {

private E name;

public E getName() {

return name;

}

public void setName(E name) {

this.name = name;

}

}

b、泛型方法:调用方法时,确定泛型的类型

定义格式:修饰符  返回值类型 方法名(参数){  }

例子:

public class GenericityMethod{

public void show(T t){

System.out.println("自定义泛型方法:"+t);

}

public T show1(T t){

return t;

}

}

c、泛型的接口:1、定义类时确定泛型的类型 2、始终不确定泛型的类型,直到创建对象时,确定泛型的类型

定义格式:修饰符 interface接口名 {  }

例子:

public interface GenericityInterface {

public abstract void add(E e);

public abstract void get(E e);

}

public class MyGenericityInterface implements GenericityInterface {

@Override

public void add(String s) {}

@Override

public void get(String s) {}

}

六、泛型的上限和下限

泛型的上限:

格式: 类型名称  extends 类 > 对象名称

意义: 代表使用的泛型只能接受【E类型及子类】

泛型的下限:

格式: 类型名称  super 类 > 对象名称

意义: 代表使用的泛型只能接收【E类型及其父类型】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值