在java中集合中迭代是怎么一回事儿?为什么要进行集合的迭代?
其实严格来说,迭代是一种设计模式,迭代的目的是遍历某一类数据集合的内容,而无需了解该类数据的数据结构。
其实现思路是:定义一个迭代器接口,该接口至少声明两个方法,分别是:hasNext(),和next()。通过hasNext()判断是否还有可遍历元素,通过next()返回可遍历元素。至于具体实现则根据不同需求创建不同实现类即可。
也就是说,迭代本没有编程语言属性,只不过几乎所有的编程语言都会支持迭代罢了。
在Java中遍历集合可以不用迭代方式,当然,不用迭代方式的遍历仅限于List接口的实现类。因为List接口规定可以通过集合索引来取得对应的值,不论这个List用的是数组还是链表实现。
但是,Java中的集合不仅仅只有List,还有Set。像这种非List集合是无法通过索引来获取指定元素的,所以这时候迭代方式就排上了用场。
除了List和Set之外,Java还有一种双列集合,又称key-value键值对集合。只不过这种集合遍历时无法直接通过迭代方式遍历。而是通过折中方式,要么先获得key值集合,通过遍历key来遍历map,要么是获得Map.Entry的集合来遍历。
总之,迭代方式不属于任何编程语言,它只是一种设计思想,只不过大多数编程语言会去实现它罢了,包括Java。
在java的集合中是怎么判断两个对象是否相等的?
先判断两个对象的hashcode()是否相等,再判断equals()是否相等,都相等则相等。PS:最终决定两个对象是否相等的是equals(),hashcode()的存在只是比较的效率了,没有hashcode()比较的会慢;equals()是判断的唯一标准,hashcode()是判断的更快
怎么用java8 lamada提取集合中每个对象的属性?
要提取属性的话,用Stream中的map,然后使用方法引用,就可以了。
举个例子Student类中有name属性:
List<Student> students = new ArrayList<Student>();
List<String> names =students.stream().map(Student::getName).collect(Collectors.toList());
也可以重新写你那个对象的toString()方法:
譬如你那个对象类为Studentclass student{private int id;private String password;private String username;public String toString(){return id +"," +password + "," + username;}}这样你就可以直接调用for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i).toString());};
javaset集合的值可以排序吗?
Set集合的排序我们知道,Set集合是无序的,可以使用TreeSet类,那么TreeSet进行排序的规则是怎样的呢?1TreeSet支持两种排序方式,自然排序和定制排序,在默认情况下,TreeSet采用自然排序.自然排序:TreeSet会调用集合元素的compareTo(Objectobj)方法来比较元素之间的大小关系,然后将集合的元素按升序排列,这种方式就是自然排序.为什么集合元素有compareTo方法,因为集合元素对象实现了Comparable接口,该方法返回一个整数值,当一个对象调用该方法与另一个对象进行比较,例如:obj1.compareTo(obj2)如果返回0,表示这两个对象相等,如果该方法返回一个正整数,表示obj1大于obj2如果该方法返回一个负整数,表示obj1小于obj2所以需要使用TreeSet集合进行自然排序,元素必须实现Comparable接口,但是Java一些常用的类已经实现了该接口,例如:StringCharacterBooleanDateTimeBigDecimalBigInteger等如:TreeSet<String>ts=newTreeSet<String>();ts.add("b");ts.add("c");ts.add("a");System.out.println(ts);结果:abc