只是想知道您是否可以使用拆分器类来拆分从 LinkedList 移动到迭代列表的详细信息?这是我在迭代 LinkedList 之前使用的初始拆分代码:
Scanner input = new Scanner(new File("today.txt"));
while (input.hasNextLine())
{
names = input.nextLine();
if(names.contains(":"))
{
splitter2 = names.split(":");
name = splitter2[0];
times = splitter2[1];
System.out.printf("%stt %s n",name, times);
}
q1.add(names);
}
Q1是我创建的链接列表。有没有办法拆分迭代列表,以便我在回调新的迭代列表时只能搜索名称?
如果我理解正确,地图比链接列表更适合您的需求。
您可以有一个Map<String,String>
,其中键name
,值times
。或者,您可以有一个Map<String,SomeObject>
,其中键是包含您从行中读取的数据的某个对象的名称和值。
然后q1.add(names)
,您可以拥有:
Map<String,String> map = new HashMap<>();
...
while (input.hasNextLine()) {
...
map.put (name,times);
...
}
或
Map<String,SomeObject> map = new HashMap<>();
...
while (input.hasNextLine()) {
...
map.put (name,new SomeObject(name,times);
...
}
稍后,您可以在地图中搜索特定名称(map.containsKey(name)
或map.get(name)
),或遍历所有名称(使用 map.keySet()
)。
有点不清楚,但我认为你要找的是一个HashMap
。如果想法是将名称和时间放入数据结构中,以便以后可以按名称搜索,那么您需要一个HashMap<String,String> map
,然后
map.put(name,times);
以添加到地图。稍后,您可以使用以下命令检索特定名称的时间
map.get(name);
这里有一些假设:
- 你不关心名字的顺序(如果你关心,请参阅
LinkedHashMap
)。 - 这些名称是唯一的(如果它们不是唯一的,请参阅番石榴的
Multimap
)。
您可以创建自定义Class
,将q1
更改为此type
的列表,如果可以split
元素,请添加元素。
final List<Person> q1=new LinkedList<Person>();
{...other code...}
//your code change to add to this list when split can occur
if(names.contains(":"))
{
splitter2 = names.split(":");
name = splitter2[0];
times = splitter2[1];
System.out.printf("%stt %s n",name, times);
q1.add(new Person(name,times);
}
然后,您可以迭代list
并将属性name
与search key
进行比较:
final String searchKey="george";
for(final Person person : q1){
if(person.getName().equalsIgnoreCase(searchKey))
System.out.println("I found " + searchKey +"!");
}
人员类:
public class Person {
private String name;
private String time;
public Person(String name, String time) {
this.name = name;
this.time = time;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setTime(String time) {
this.time = time;
}
public String getTime() {
return time;
}
}
或者,您可以在迭代期间仅list
迭代和拆分字符串,方法与以前相同。以前的方法更好。
例:
public static void main(String[] args) {
final String search = "george";
List<String> q1 = new LinkedList<String>();
q1.add("tom:120000");
q1.add("george:130000");
q1.add("john:120000");
for (final String q : q1) { //for each string q in the list q1
if (q.contains(":")) {
final String[] split = q.split(":");
final String name = split[0];
final String time = split[1];
if (name.equalsIgnoreCase(search)) {
System.out.println("I found " + search + "!");
System.out.println(name + " : " + time);
break;
}
}
}
}