第16章:数组
数组是一种较为简单的存储。先说一下他的特点:效率高,但是必须指定长度。现在用的也挺少了。因为带泛型的容器更灵活也很安全,虽然效率较低,但是一般开发都不会事先知道有多少个对象,所以用到相对较少。
我们分析一下数组和容器不同的根本点。看到这里,我们始终也在做的,就是我认为语言共同的部分,就是内存的控制。对于java如果我们做到将它的工作原理都映射到对应的内存的控制之上,我觉的我们就能很快通百家之言,这我们看到的表面和内存控制之间复杂控制就是我们索要了解的,探究的。说的有点远,回到不同点应该就是两者的工作原理不同,具体就是存入时和取出时有一些差异。我们之前分析容器每个对象都会经过上转型成为object型作为引用,存储的时候会将原有信息一并存入,取出时会下转型。而数组不同,数组去掉了上转型和下转型的工作部分,直接存储相关的类型信息,在运行原理上会快一些。再有数组直接指定了堆栈的区域大小,数据紧凑,我们在垃圾回收的时候有想过,数据紧凑自然就会快些(先这样理解,直觉告诉我这里不是这么简单)。
虽然数组用到少,但是偶尔还是会用到。常用的比较和排序,一般是用匿名内部类的方式。不对,现在匿名内部类用的都少了,改用最新版的stream()和lambda表达式的型式,这个lambad实际上也是一种匿名内部类。举个例子:
List<Person> collection = new ArrayList<Person>(); collection.add(new Person("男")); collection.add(new Person("女")); Stream<Person> streamPerson = collection.stream().filter( person -> person.getGender.equals("男") ) List onlyMan = streamPerson.collect(toList());
上面举的容器的例子,但是数组应该也可以使用,原谅对数组没有验证。昨天落下一天应该反思。坚持就应该是一件不间断的事情。没有特殊情况不会有下次。