百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

《JAVA编程思想》5分钟速成:第16章(数组)

toyiye 2024-09-07 00:38 4 浏览 0 评论

第十六章、数组

数组通过整型index来访问元素,并且尺寸不能改变(特征);需要使用持有对象时需要评估使用数组 or 其他容器。

1.数组为什么特殊

数组与其他种类的容器的区别有三方面:效率、类型和保存基本类型的能力。

  • 效率 :在Java中,数组是一种效率最高的存储和随机访问对象引用序列的函数。
  • 类型:数组之所以优于泛型之前的容器,就是因为你可以创建一个数组去持有某种具体类型。这意味着你可以通过编译器检查,来防止插入错误类型和抽取不当类型。--此优势已丧失!
  • 保存基本类型:由于自动包装机制,容器也能持有基本类型。--此优势已丧失!

数组硕果仅存的优点就是效率。然而,如果要解决更一般化的问题,那数组就可能会受到过多的限制,因此在这些情形下你还是会使用容器。


2.数组是第一级对象

  • 数组标识符:无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个数组对象用以保存指向其他对象的引用。
  • 只读成员length: 是数组对象唯一一个可以访问的字段或方法。[] 语法是访问数组对象的唯一方式。
  • 数组初始化:新生成一个数组对象时,所有引用自动初始化为 null。


3.返回一个数组对象

在Java中,你只是直接返回一个数组,而无需担心要为数组负责——只要你需要它,它就会一直存在,当你使用完后,垃圾回收器就会清理掉它。

eg: public String[] flavorSet() {return results;} //C++中只能返回数组指针,不能直接返回数组。


4.多维数组

  • 多维数组:对于基本类型的多维数组,可以通过使用花括号将每个向量分隔开,每个花括号括起来的集合都会把你带到下一级数组。

int[][] a = {{1,2,3},{4,5,6},} System.out.println(Arrays.deepToString(a)); //Arrays.deepToString() 方法将多维数组转换为多个 String。 //Output:[[1,2,3],[4,5,6]]

  • 粗糙数组:数组矩阵的每个向量都可以具有任意的长度(length)。


5.数组与泛型

  • 数组实例化&泛型:通常,数组与泛型不能很好地结合。不能实例化具有参数化类型的数组。

Peel<Banana>[] peels = new Peel<Banana>[10]; //illegal

原因:擦除会移除参数类型信息,但数组必须知道它持有的确切类型

  • 数组本身类型&泛型:但是,它允许创建对这种数组的引用。而且,尽管你不能创建实际的持有泛型的数组对象,但是你可以创建非泛型的数组,然后将其转型。
List<String>[] ls;  //legal 
class ClassParameter<T>{
public T[] f(T[] arg){ return arg;}//legal 
public T[] g(int size){ return (T[]) new Object[size];}//legal 
}


6.创建测试数据

方便生成填充了测试数据的数组的工具。

6.1 Arrays.fill()

这个方法十分有限,只能用同一个值填充各个位置,而针对对象而言,就是复制同一个引用进行填充。或者填充数组的某个区域。

String[] a = new String[6];
Arrays.fill(a,"Hello")
print(Arrays.toString(a));      //[Hello,Hello,Hello,Hello,Hello,Hello]
Arrays.fill(a,3,5,"World")
print(Arrays.toString(a));      //[Hello,Hello,Hello,World,World,Hello]

6.2 数据生成器

  • 策略模式:不同的Generator的具体实现类,分别实现不同的计数方式。不同类型数据的计数工具类的代码实现细节见书P443。

6.3 从Generator中创建数组

public interface Generator<T>{
T next();  //策略模式 or 模板方法?
}
public static class BooleanCount implements Generator<java.lang.Boolean>{
public java.lang.Boolean next(){
return r.nextBoolean();
}
}
@SuppressWarnings("unckecked") //屏蔽compile warning
public static <T> T[] array(Class<T> type ,Generator<T>gen,int size){
//Array.newInstance:借由传入Class对象创建对应类型元素的数组
T[] a =  (T[]) java.lang.reflect.Array.newInstance(type,size); 
return new CollectionData<T>(gen,size).toArray(a);
}


7.Arrays实用功能

在 java.util 类库中可以找到Arrays类。

  • equals():用于比较两个数组是否相等;
  • fill():填充数组;
  • binarySearch():用于在已经拍好序的数组中查找元素;
  • toString():产生数组的String表示;
  • hashCode():产生数组的散列码;
  • Arrays.asList():接受任意的序列或数组作为其参数,并转变为List容器。

7.1 复制数组

System.arrayCopy() 用它复制数组比for循环要快很多。其参数有:源数组,表示从源数组中的什么位置开始复制的偏移量,表示从目标数组的什么位置开始复制的偏移量,以及需要复制的元素个数。

  • 浅拷贝:shallow copy:System.arrayCopy() 复制对象数组时,只是复制了对象的引用,并不是对象本身的拷贝;
  • 深拷贝:deep copy:拷贝对象,不是只拷贝对象的引用。

7.2 数组的比较

  • Arrays.equals():Arrays类提供了重载后的equals方法,用来比较整个数组。相等的条件:数组的length相等&对应index的元素也相等。

7.3 数组元素的比较

  • 比较算法定制:实现java.lang.Comparable<T> 接口,使你的类具有定制的比较能力。
  • Arrays.sort():数组自动排序
interface Comparator<T>{
	int compare(T o1,T o2);
}
class CompTypeComparator implements Comparator<CompType>{
@Override
public int compare(CompType o1,CompTypeo2){ return (“自定义比较算法”);}
}

7.4 数组排序(使用数组内置排序)

  • Arrays.sort(a,String.CASE_INSENSITIVE_ORDER) :使用内置的排序方法,就可以对任意的基本类型数组排序;也可以对任意的对象数组进行排序,只要该对象实现了 Comparable 接口或具有相关联的 Comparator。

7.5 在已排序的数组中查找

  • Arrays.binarySearch():如果数组已经排好序了,就可以使用 Arrays.binarySearch() 执行快速查找。


相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码