如何在android中获取indexof(object)请参阅我的示例以了解

时间:2018-12-09 21:26:47

标签: java android android-studio

请阅读此示例以了解我的问题,谢谢。

像这样向arraylist添加一些数据之后:

ArrayList<UserInfo> user_info = new ArrayList<>();
user_info.add(new UserInfo(1, "alex", "26"));
user_info.add(new UserInfo(2, "daniel", "23"));
user_info.add(new UserInfo(3, "veka", "19"));

我想获取“ veka” 的索引,我该怎么做? 我知道如何使用get index of来处理数组字符串,但是如何使用 UserInfo

的示例来做到这一点

谢谢。

这是 UserInfo.class

public class UserInfo {

private int id;
private String UserName;
private String UserAge;

public UserInfo(int id, String userName, String userAge) {
    this.id = id;
    UserName = userName;
    UserAge = userAge;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getUserName() {
    return UserName;
}

public void setUserName(String userName) {
    UserName = userName;
}

public String getUserAge() {
    return UserAge;
}

public void setUserAge(String userAge) {
    UserAge = userAge;
}
}

2 个答案:

答案 0 :(得分:0)

您应该实现equals方法的替代。 indexOf函数将使用它。

一个例子在这里

public class Point {

    int x; 
    int y;

    public Point(int a, int b) {
    this.x=a;this.y=b;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + x;
        result = prime * result + y;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Point other = (Point) obj;
        if (x != other.x)
            return false;
        if (y != other.y)
            return false;
        return true;
    }       
}

ArrayList<Point> p=new ArrayList<Point>();

Point p1 = new Point(3,4);
Point p2 = new Point(1,2);

p.add(new Point(3,4));
p.add(new Point(1,2));

System.out.println(p.indexOf(p1));

使用此信息,您可以更新您的课程,然后它将正常工作。

答案 1 :(得分:0)

您使用ArrayList而不是Hashmap的事实背后是否有某些原因? Hashmap通过特定键(可以是您的用户名)提供快速查找

伪代码看起来像这样:

HashMap<String, UserInfo> info = new Hashmap<>(); info.add("A", new UserInfo(1, "A", "26"); info.add("B", new UserInfo(2, "B", "26"); info.add("C", new UserInfo(3, "C", "26");

然后一个简单的info.get(“ A”)将返回UserInfo(2,“ B”,“ 26”)。

但是如果需要一个Arraylist,则遍历整个数组并检查所提供的UserName是否与UserInfo对象的Username相匹配。伪代码再次出现在这里:

您在ArrayList中添加了一个新方法:

public void isMatchingUsername(String userName) { return this.UserName == username; }

然后:

UserInfo matchingUser;
for(UserInfo userInfo : user_info){
    if(userInfo.isMatchingUsername("theUsersUsername")){
        machingUser = userInfo;
        break;
    }
}`

在那里,您已经找到了-matchingUser拥有您要查找的UserInfo的引用