【笨鸟先飞】Java重新学习日记7---高级数组之集合

来源:互联网 发布:thinkphp5开发大型cms 编辑:程序博客网 时间:2024/05/01 09:15

一直觉得数组是很简单的,在使用上或许有些小陷阱,但是出发点简单,使用场景也普通,当然其功能也就单一了。

为了可扩展数组的功能(我是这么认为的),java增加了集合机制。

首先建议把集合是高级的数组,其目的也是讲相同类型的数据(或者类)放到同一个地方,用同一个变量来统一传递。

集合主要有三类,setlistmap

其中list和数组是最像的,所以我先讲讲list

List是一个数组,但是其长度不是固定的,最常见的是ArrayListList和数组一样,都是从0开始,然后1,2,3一个一个添加,添加使用.add()完成,遍历的方法也和数组一致。

在不涉及类的情况下,list就是一个长度可变的数组,在读取的时候,也用0,1,2,3作为标记读取。

 

Set是第二种集合,和list的区别是,set没有顺序,在存放的时候,顺序未知,在读取的时候循序也未知。

  

 在使用的时候,根据需要来使用,如果就是长度确定的数据,就使用数组。如果不是长度确定的数据,则采用集合。

对于集合,如果我们对存放在里面的数据有循序要求则使用List,如果没有要求,则使用Set

 

集合还有一种特殊类型,叫做mapmapset有点像,但是map要求是存入两个参数,这两个参数是绑定到一起的,成对的放入map中,这两个参数一般是不同类型的。  如果是两个相同类型的参数,那么你既可以用map存放,也可以用数组放到set里面。

 

集合,数组,和之前我讲过类的继承都有个共同的要点,就是在实现上有个量的预期。由于当年刚刚开始学习java的时候,没有这个量的预期,导致理解集合和数组都很吃力。

 

回忆一下,我在之前章节说过,一个类A被类B继承。 那么我们至少要求,AB都创建对象,或者类A还要被其他类继承。  不然就没必要写出类A来,直接写类B就可以。

 

同样集合也是,我们要求往里面放入,至少在某些特定情况下,要放入一定量的数据,包括数组。

 

如果我想定一个坐标,包含xy轴,那么,我既可以定数组int[2] a =new int[],  也可以直接int ax;   int ay;定义两个int类型,在使用上,分开比数组更加简单。如果存入的量足够多,比如从1100的数,后续,我要把他们加起来以及乘起来,那么就要用到数组了。

Int[100] a = new int[];这种时候,就没法去定义 int a1一直定义到int a100了。

 

如果有变化,假设我要放入学生的成绩,按顺序,那么依然是数组。但是如果学生人数位置,比如我做个系统,适用于所有的班级,每个班级人数不一样,那么这个时候就需要list

 

如果放入的成绩,不是按照顺序排列,我们只要知道里面的整体关系,比如平均成绩,最高分,最低分,那么使用set会更好。

 

如果,我们要把成绩和学生的名字放到一起,这样我们可以根据学校名字查询成绩,那么,map的作用就体现了。

 

无论是listsetmap他们都是集合,他们的目的都是处理一定数量级或许3个或许更多,如果你是在尝试理解的话,建议10个乃至100个以上的参数,需要放到集合里面,然后根据需求的差别来选择listsetmap

 

或许有人会问,listset是放1个参数的,map是放两个参数的,如果我有好多个参数呢。

根据我的经验,数十个对象,分别有3个及以上,比如10多个参数的话,那么将这些参数放到一个类里面,然后创建对象,将对象放到集合里面。即所有参数,当成一个参数在集合中处理。

 

集合是数组的提升,以及我在数组中提到了,数组就是为了集合,集合最美妙的地方是,它可以储存对象。

 

 

泛型是集合使用类和对象的关键性语法,不说太多,直接上代码,依然是keyboard

 

ArrayList<keyboard>  kArray = new ArrayList<>();

 

Public void createKeyboard(Keyboard k1){

kArray.add(k1);

}

 

调用createKeyboard方法,传入造好的键盘,后面kArray集合里面,就全是Keyboard对象了,这些对象不仅包含参数还包含方法,非常好用。

 

实际使用中,一些相对底层的对象,往往需要创建很多个,这个例子里可能是Keyboard的按键Key就是一个类,里面包含了一些变量和方法,对于每一个Keyboard的对象里面都需要包含许多Key对象的KeyArray集合。恩,应该是KeySet,用Set集合来放按键,然后将这个按键的集合放到KeyBoard里面,根据Keyboard的不同,里面时间按键的Set也不同。

  后面这个Key的例子更加契合集合的使用地方,而实际上,集合使用时很广泛的,在一个相对有规模的程序中,里面的小对象,必然是成堆的建立,而这些小对象放在集合里传递在是正确的做法。

 

理解一个功能的作用,去想什么时候用它,不如想在需要他的时候,如果没有它会怎么样。

 

对于数组可以批量传递,对于String字符串呢,对于有功能的方法以及各种其他一些变量呢,如果没有集合,就没有办法进行批量传递,那么在实现的时候,代码体量就会非常大了。

 

本次重新学习java的目的,是回忆第一次学习时,那些难以理解的地方,重新思考吃透彻,以及我在本次回忆中,表达关于编程我的一个观点是,编程的技巧和工具都是服务于逻辑本身,集合也是一样,在需要使用的时候去使用。没必要为了传递12个相似对象就创建一个集合,一般还是多个对象需要传递时再去创建,不然不禁没有简化,反而更加麻烦。

 

Collection是集合之友,是java为了简化集合的一些操作,而专门出的一个辅助工具类,里面的方法都是静态方法,你只需要用类直接调用,就可以对集合里面的数据进行批量操作,避免了每次都要使用for循环来遍历集合的困扰。

 

Collections.swap(KeyArray,10,20);

将集合KeyArray中的第10key对象和第20key对象交换。

 

Collections的功能还有很多,可以统一学习,也可以再需要使用的时候,慢慢看,总之,在使用集合的时候,在需要进行某个相对需要好几行代码实现的操作才能实现的代码的时候,看一下Collections,应该能够用一行代码解决你的困扰。

阅读全文
0 0
原创粉丝点击