一个List放入多个person对象,每个person对象有name,age两个属性,现要求不准遍历List,取出name=张三,age=23的person对象
解决方案 »
- 看到一个求1到19中相加等于20的数,问题解决了,求此贴!
- java代码块执行顺序问题(怪!)。
- 大家进来看下 我也不懂怎么标题这个问题
- 一个getContentPane()的问题
- 请问有谁知道怎么读取插在usb接口的红外线设备的数据吗?
- 已存在一个byte型的数组,存入的是一串double型的数值,如何把它再还原成double型的数值?
- 重金急求原程序:中文问题!!!!
- 大家來看一下我的程序,我是用GridBagLayout的,但為什麼不行?指點指點~!
- 谁知道jbuilder3的KEY
- 如何查看Jstat的参数结果和分析内存使用,请大牛指点
- 多线程不停执行if判断,即便if条件正确也不执行(判断的是另一个类的公共静态变量),在线程run方法最前面加一句输出print语句却又执行了,求解……
- JAVA求助
将集合的操作都利用stream来处理,牛逼的不要不要的
J8我感觉map的操作比以前方便很多
https://www.cnblogs.com/andywithu/p/7404101.html
这个不就是C# 里面的LINQ吗
我翻了下源码,IteratorSpliterator这个里面就是集合类的迭代器阿里会问这么low的问题?
参考
import java.util.ArrayList;
import java.util.List;public class test4 {
public static void main(String[] arg0) {
List<Person> list = new ArrayList<Person>();
Person p1 = new Person("lisi", 23);
Person p2 = new Person("wangwu", 23);
Person p3 = new Person("zhangsan", 23);
Person p4 = new Person("lisi", 25);
Person p5 = new Person("wangwu", 25);
Person p6 = new Person("zhangsan", 25);
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
list.add(p6);
System.out.println(list.get(list.indexOf(new Person("zhangsan", 23))));
}
}class Person {
private String name;
private int age; public Person(String name, int age) {
super();
this.name = name;
this.age = age;
} public char[] gethashcode(Person person) {
// TODO Auto-generated method stub
return null;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
那可以换个角度去理解这个问题
可以类比成数据库查找数据,List==表中数据,我们只需要额外加一个类似索引的数据结构,就可以避免全表搜索,也就是遍历或者用skip list再或者排序再二分查找法,也不算全部遍历了
list[1]= new person(){ name ='XX' , age=5};
list[...]= new person(){ name ='XX' , age=5}; list[0] //
import java.util.ArrayList;
class Person{
public Person(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toString(){
return String.format("Person[%s,%d]",name,age);
} @Override
public boolean equals(Object obj){
if(!(obj instanceof Person)){
return false;
}
Person person = (Person)obj;
return person.name.equals(name) && person.age == age;
} private String name;
private int age;
}public class Test{
public static void main(String[] args){
Person p1 = new Person("李四",28);
Person p2 = new Person("张三",25);
Person p3 = new Person("张三",23);
Person p4 = new Person("王五",24);
ArrayList<Person> people = new ArrayList<>();
people.add(p1);
people.add(p2);
people.add(p3);
people.add(p4); Person find = new Person("张三",23); int index = people.indexOf(find);
if(index > -1){
System.out.println("找到:" + people.get(index) + " 对应位置:" + index);
}else{
System.out.println("未找到:" + find);
}
}
}
/**
* Returns the index of the first occurrence of the specified element
* in this list, or -1 if this list does not contain the element.
* More formally, returns the lowest index <tt>i</tt> such that
* <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>,
* or -1 if there is no such index.
*/
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Test69 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person69 p1 = new Person69("p1", 11);
Person69 p2 = new Person69("p1", 11);
Person69 p3 = new Person69("p2", 11);
Person69 p4 = new Person69("p3", 11);
Person69 p5 = new Person69("p4", 11);
TestHashMapList list = new TestHashMapList();
list.add(p1.toString(), p1);
list.add(p2.toString(), p2);
list.add(p3.toString(), p3);
list.add(p4.toString(), p4);
list.add(p5.toString(), p5);
System.out.println(list.hashGet("p1_11"));
}}class Person69{
private String name;
private int age;
public Person69(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.name + "_" + this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}class TestHashMapList { private Map<String, List<Person69>> mapValue = new HashMap(2147483);
public void add(String str, Person69 person){
if(this.mapValue.containsKey(str)){
this.mapValue.get(str).add(person);
}else {
List temp = new ArrayList(16);
temp.add(person);
this.mapValue.put(str, temp);
}
}
public List<Person69> hashGet(String str){
return this.mapValue.get(str);
}
}