Java 在迭代的LinkedList上使用拆分器?
只是想知道是否可以使用拆分器类拆分从LinkedList移动到并迭代的详细信息?这是我在迭代LinkedList之前使用的初始拆分代码:Java 在迭代的LinkedList上使用拆分器?,java,Java,只是想知道是否可以使用拆分器类拆分从LinkedList移动到并迭代的详细信息?这是我在迭代LinkedList之前使用的初始拆分代码: Scanner input = new Scanner(new File("today.txt")); while (input.hasNextLine()) { names = input.nextLine(); if(names.contains(":"))
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("%s\t\t %s \n",name, times);
}
q1.add(names);
}
Q1是我创建的LinkedList。
是否有方法拆分迭代列表,以便我在回调新的迭代列表时只能搜索名称?如果我理解正确,映射比链接列表更适合您的需要 您可以有一个
映射
,其中键为名称
,值为时间
。或者您可以有一个映射
,其中键是包含从该行读取的数据的某个对象的名称和值
然后,您可以拥有以下内容,而不是q1.添加(名称)
:
Map<String,String> map = new HashMap<>();
...
while (input.hasNextLine()) {
...
map.put (name,times);
...
}
Map Map=newhashmap();
...
while(input.hasNextLine()){
...
map.put(名称、时间);
...
}
或
Map Map=newhashmap();
...
while(input.hasNextLine()){
...
map.put(名称,newsomeobject(名称,时间);
...
}
稍后,您可以在映射中搜索特定名称(
map.containsKey(名称)
或map.get(名称)
),或迭代所有名称(使用map.keySet()
).这有点不清楚,但我认为您正在寻找的是一个哈希映射
。如果想法是将名称和时间放入数据结构中,以便以后可以按名称搜索,那么您需要一个哈希映射
,然后
map.put(name,times);
添加到地图。稍后,您可以使用
map.get(name);
这里有一些假设:
LinkedHashMap
)Multimap
)您可以创建一个自定义的
类
,将q1
更改为该类型的列表
,添加元素(如果可以拆分
)
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("%s\t\t %s \n",name, times);
q1.add(new Person(name,times);
}
人员类别:
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;
}
}
或者,在迭代过程中,您可以像以前一样,只迭代和拆分字符串列表
。前面的方法更好
例如:
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;
}
}
}
}
publicstaticvoidmain(字符串[]args){
最终字符串搜索=“george”;
列表q1=新的LinkedList();
q1.增加(“tom:120000”);
q1.增加(“乔治:130000”);
q1.增加(“约翰:120000”);
对于(最终字符串q:q1){//对于列表q1中的每个字符串q
如果(q.contains(“:”)){
最终字符串[]split=q.split(“:”);
最终字符串名称=拆分[0];
最终字符串时间=拆分[1];
if(name.equalsIgnoreCase(搜索)){
System.out.println(“我找到了”+搜索+”!”;
System.out.println(name+“:”+时间);
打破
}
}
}
}
不清楚您在问什么。为什么不在列表中只添加“名称”而不是“名称”。我想同时添加名称和时间,这样名称就同时包含这两个。名称是否唯一?然后使用地图,让它们键入“名称”并值为“时间”所有姓名都是唯一的,但我被要求只使用LinkedList。但我需要将数据拆分,这样我就可以只使用人名搜索列表,而不必输入姓名和时间。@BamBam如果您只需要姓名并且必须使用LinkedList,只需将姓名
添加到列表中(而不是姓名
)。所有名称都是唯一的,但我被要求只使用LinkedList。但我需要将数据拆分,以便我可以只使用人名搜索列表,而不必输入名称和时间。@BamBam在这种情况下,您需要一个可以存储名称和时间的新类,以便查看列表并询问每个元素的名称。
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;
}
}
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;
}
}
}
}