欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java数组和集合的使用

程序员文章站 2022-03-15 20:59:38
1、如何理解数组在Java中作为一个类使用Java数组的步骤:声明数组,使用一个引用来操作数组;使用new关键字为数组创建所需的内存空间,并且返回一个引用的值,还可以使用{}符号为数组赋初始值;使用数组的下标对数组值进行操作。Java的数组本质上是一个类,该类保存了数据类型的信息。该类通过成员变量的像是来保存数组,通过[]符号使用下标来访问数组。在处理基本数据类型时,数组保存的是变量的值,如果没有定义初始值,数组会把这些变量保存的值初始化为0(int类型数组);处理引用数据类型时(如String...

1、如何理解数组在Java中作为一个类

使用Java数组的步骤:

  1. 声明数组,使用一个引用来操作数组;
  2. 使用new关键字为数组创建所需的内存空间,并且返回一个引用的值,还可以使用{}符号为数组赋初始值;
  3. 使用数组的下标对数组值进行操作。
    Java的数组本质上是一个类,该类保存了数据类型的信息。该类通过成员变量的像是来保存数组,通过[]符号使用下标来访问数组。在处理基本数据类型时,数组保存的是变量的值,如果没有定义初始值,数组会把这些变量保存的值初始化为0(int类型数组);处理引用数据类型时(如String),数组保存的是数据的引用,如果为提供初始值数组会把这些变量初始化为null。

2、new Object[5]是否创建了5个对象

不是,new Object[5]只是创建了一个数组实例,长度为5,每个数组元素的值为null,并不是创建了5个对象。

3、如何拷贝数组的数据

使用System.arraycopy()方法,或者创建一个新的数组,把数组的元素遍历拷贝进新的数组,不能用=赋值运算符。

4、什么是集合?

集合,用来存储数据的对象,是数据结构的一种体现,也是对数组在功能上的扩展。java.util包下的集合框架主要由几个接口和实现类组成,如图:

Java数组和集合的使用
Java数组和集合的使用

  1. 列表List:有序存放,允许重复,可以存放不同类型的对象;
  2. 集合Set:无需存放,不允许重复;
  3. 队列Queue:FIFO先入先出的数据结构;
  4. Map实现类用于保存具有映射关系的数据。Map保存的每项数据都是key-value对。Map里的key是不可重复的,key用户标识集合里的每项数据。
    所有的实现类,都能只能存放对象。

5、迭代器是什么?

可迭代是Java集合框架下的所有集合类的一种共性,也就是把集合中的所有元素遍历一遍。迭代的过程需要依赖一个迭代器对象。
迭代器模式(Itereror),提供一种方法访问一个容器对象中各个元素。从定义上看,迭代器是为容器而生,本质上就是一种遍历的算法。迭代器就是一个接口Iterotor。例子:

public class Test{
	List<String> list = new ArrayList<>();
	list.add("a");
	list.add("b");
	Iterator<String> iterator = list.Iterator();//得到list的迭代器
	//调用迭代器的hasNext方法,判断是否有下一个元素
	while(iterator.hasNext()){
		//将迭代的下标移动一位
		System.out.println(iterator.next());
	}
}

6、比较器是什么?方法

Comparable和Comparator接口。
对于Comparable接口来说,仅仅包含一个compareTo()方法,只有一个参数,返回值为int类型,当前对象大于参数对象时,返回值大于0;小于参数对象时,小于0;等于参数对象时,等于0。
对于Comparatot接口来说,实现者称为比较器,包含一个compare()方法,返回值与Comparable的方法compareTo一样。不同的是,Comparator接口一般不会被集合元素类所实现,而是单独使用或者在匿名内部类中使用。比较器的运用不仅限于元素的比较,还会应与集合元素的排序。它可以提供对某个集合或数组进行整体排序的比较函数,将Comparator传递给sort方法。

7、Vector与ArrayList的区别

Vector与ArrayList都是List的实现类,都代表链表形式的数据结构。
Vector是线程安全的,操作元素的方法都是同步方法,ArrayList不是,但是执行效率没有ArrayList高。

8、HashMap和HashTable的区别

两者都是Map接口的实现类,保存元素的方式都是无序的。区别:

  1. HashTable的方法是同步的,HashMap不能同步;
  2. HashTable不允许null值,HashMap允许;
  3. HashTable有一个Enumeration遍历,HashMap是Iterator遍历;
  4. HashTable有一个contains()方法,功能和containsValue()功能一样;
  5. HashTable中hash数组的默认大小是11,增长方式是old*2+1;HashMap中hash数组的默认大小是16,一定是2的指数;
  6. 哈希值的使用不同,HashTable直接使用对象的hashCode,而HashMap会重新计算hash值。

9、集合使用泛型有什么好处?

对于集合类来说,它们可以存放各种类型的元素。如果存放之前知道元素的类型,可以让代码更加直观、简洁。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class TestFanXing {
	public static void main(String[] args) {
		List l1 = new ArrayList();//无泛型创建链表对象
		l1.add("a");
		l1.add("b");
		Iterator it = l1.iterator();
		while(it.hasNext()) {
			Object obj = it.next();//获取元素,类型为object
			String val = (String) obj;
			System.out.println(val);
		}
		List<String> l2 = new ArrayList<>();
		l2.add("a");
		l2.add("b");
		//foreach遍历,类型直接转换为String
		for(String str : l2) {
			System.out.println(str);
		}
	}
}

以上代码中l1没有使用泛型,存放的所有类型都为Object类型,使用的时候还需要进行类型的强制转换。而泛型列表l2,它在创建的时候就用<>声明了保存的数据类型,因此获取元素的时候,类型也会自动转换。

10、如何把集合对象中的元素进行排序?

TreeSet这类集合是可以自动排序的。
对于没有排序功能的集合来说,都可以使用Java.util.Collection.sort()方法进行排序,它除了排序集合对象以外,还需要提供一个比较器。如果列表中的元素全都是相同类型的,并且这个类实现了Comparable接口,可以直接调用Collection.sort()方法。如果没有实现Comparator,就可以传递一个comparator实例作为sort()的第二个参数进行排序。如果不想使用默认的分类顺序进行排序,同样可以传递一个Comparator实例作为参数来进行排序。

11、符合什么条件的数据集合可以进行foreach循环

foreach循环就是循环遍历一个集合中的元素,起到迭代器的作用。数组或者实现了Iterable接口的类实例,都可以使用foreach循环。
数组是Java规定的内容,只能遵照语法来使用。对于“实现类Iterable接口的类实例”,可以自定义一个集合类:

  1. 定义一个类,包含一个整型下标成员变量和一个集合对象;
  2. 将该类实现Iterable接口;
  3. 提供一个Iterator接口的实现;
  4. 使用下标成员变量和集合对象来完成Iterator接口所需要的方法。

本文地址:https://blog.csdn.net/Mr_Carrots/article/details/110240512