Java复习面试知识点

Java复习面试知识点

前言:

简要的记录一下学习到的东西,仅供自己查阅和复习方便。希望该文章能对你有帮助,文章学习自博客和b站UP主的教程

集合:

集合简介:

Java标准库自带的java.util包含了集合类:Collection,它是除Map外所有其他集合类的根接口。Java的java.util包主要提供了以下三种类型的集合:

  • List:一种有序列表的集合,例如,按索引排列的Student的List;
  • Set:一种保证没有重复元素的集合,例如,所有无重复名称的Student的Set;
  • Map:一种通过键值(key-value)查找的映射表集合,例如,根据Student的name查找对应Student的Map。

Java集合的设计有几个特点:一是实现了接口和实现类相分离,例如,有序表的接口是List,具体的实现类有ArrayListLinkedList等,二是支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素,例如:

List<String> list = new ArrayList<>(); // 只能放入String类型

最后,Java访问集合总是通过统一的方式——迭代器(Iterator)来实现,它最明显的好处在于无需知道集合内部元素是按什么方式存储的。

List
我们考察List<E>接口,可以看到几个主要的接口方法:

  • 在末尾添加一个元素:boolean add(E e)
  • 在指定索引添加一个元素:boolean add(int index, E e)
  • 删除指定索引的元素:E remove(int index)
  • 删除某个元素:boolean remove(Object e)
  • 获取指定索引的元素:E get(int index)
  • 获取链表大小(包含元素的个数):int size()
  • 判断List是否包含某个指定元素。boolean contains(Object o)
  • 返回某个元素的索引,如果元素不存在,就返回-1。int indexOf(Object o)
    通常情况下,我们总是优先使用ArrayList

除了使用ArrayListLinkedList,我们还可以通过List接口提供的of()方法,根据给定元素快速创建List:

List<Integer> list = List.of(1, 2, 5);

但是List.of()方法不接受null值,如果传入null,会抛出NullPointerException异常

遍历List
List<String> list = List.of("a","b","c","d");

有三种方式遍历List,第一种就是简单的使用for循环和get

        for(int i = 0; i < list.size(); i++){
   
            System.out.println(list.get(i));
        }

这种方法并不推荐。

我们应该坚持使用迭代器Iterator来访问List。Iterator本身也是一个对象,但它是由List的实例调用iterator()方法的时候创建的。Iterator对象知道如何遍历一个List,并且不同的List类型,返回的Iterator对象实现也是不同的,但总是具有最高的访问效率。

Iterator对象有两个方法:boolean hasNext()判断是否有下一个元素,E next()返回下一个元素。因此,使用Iterator遍历List代码如下:

        for(Iterator<String> it = list.iterator();it.hasNext();){
   
            String s = it.next();
            System.out.println(s);
        }

由于Iterator遍历是如此常用,所以,Java的for each循环本身就可以帮我们使用Iterator遍历:

        for (String s:list){
   
            System.out.println(s);
        }

实际上,只要实现了Iterable接口的集合类都可以直接用for each循环来遍历,Java编译器本身并不知道如何遍历集合对象,但它会自动把for each循环变成Iterator的调用,原因就在于Iterable接口定义了一个Iterator<E> iterator()方法,强迫集合类必须返回一个Iterator实例。
Array和ArrayList的区别
两者之间的区别:
一:空间大小

1、Array的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小。
2、ArrayList的空间是动态增长的,如果空间不够,它会创建一个空间比原空间大0.5倍的新数组,然后将所有元素复制到新数组中,接着抛弃旧数组。而且,每次添加新的元素的时候都会检查内部数组的空间是否足够。

二:存储内容

1、Array数组可以包含基本类型对象类型
2、ArrayList却只能包含对象类型
需要注意的是:Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object

三:方法

ArrayList作为Array的增强版,当然是在方法上比Array多样化。比如添加全部addAll()、删除全部removeAll()、返回迭代器iterator()等。

List和Array的转换

List转换成Array有三种方法:

        Object[] array1 = list.toArray();
        System.out.println(Arrays.toString(array1));
        System.out.println("----------------------------");

        //第二种方式是给toArray(T[])传入一个类型相同的Array,List内部自动把元素复制到传入的Array中
        //如果传入的数组不够大,那么List内部会创建一个新的刚好够大的数组,填充后返回;如果传入的数组比           List元素还要多,那么填充完元素后,剩下的数组元素一律填充null。
        //实际上,最常用的是传入一个“恰好”大小的数组:
        String[] array2 = list.toArray(new String[list.size()]);
        System.out.println(Arrays.toString(array2));
        System.out.println(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值