Java 删除一个关键点的所有引用只会删除一个关键点
我有以下资料:Java 删除一个关键点的所有引用只会删除一个关键点,java,Java,我有以下资料: ArrayList<GregorianCalendar> toRemove = new ArrayList<GregorianCalendar>(); SortedSet<GregorianCalendar> copyKeys = new TreeSet<GregorianCalendar>(MyCalendarTester.myCal.getMyCalHash().keySet());
ArrayList<GregorianCalendar> toRemove = new ArrayList<GregorianCalendar>();
SortedSet<GregorianCalendar> copyKeys = new TreeSet<GregorianCalendar>(MyCalendarTester.myCal.getMyCalHash().keySet());
for(GregorianCalendar remove: toRemove){
copyKeys.removeAll(Collections.singleton(remove));
}
ArrayList toRemove=new ArrayList();
SortedSet copyKeys=新树集(MyCalendarTester.myCal.getMyCalHash().keySet());
用于(GregorianCalendar删除:删除){
copyKeys.removeAll(Collections.singleton(remove));
}
我正在尝试删除我的树集copyKeys中出现的每一个键“remove”。但它似乎只移除了其中一个。有人能告诉我我做错了什么吗?如果你需要更多信息,请告诉我
编辑:
为了它,这里是我的整个混乱的方法(我知道它还有一些问题,只是我要问的问题),但这里是这样的:
public void eventList(){
int year = -1;
GregorianCalendar tempKey = null;
ArrayList<Event> tempArr = new ArrayList<Event>();
ArrayList<GregorianCalendar> toRemove = new ArrayList<GregorianCalendar>();
int countEnd = 0;
if(MyCalendarTester.myCal.getMyCalHash().equals(null)){
System.out.println("Your calendar is empty!");
}
else{
System.out.println("Here are your events: ");
SortedSet<GregorianCalendar> keys = new TreeSet<GregorianCalendar>(MyCalendarTester.myCal.getMyCalHash().keySet());
SortedSet<GregorianCalendar> copyKeys = new TreeSet<GregorianCalendar>(MyCalendarTester.myCal.getMyCalHash().keySet());
tempKey = keys.first();
int countTotal = keys.size();
for(GregorianCalendar key : copyKeys){
GregorianCalendar copyKey = key;
Event value = MyCalendarTester.myCal.getMyCalHash().get(key);
// System.out.println(" key.get(Calendar.MONTH) = " + key.get(Calendar.MONTH));
// System.out.println("(tempKey.get(Calendar.MONTH)) = " + (tempKey.get(Calendar.MONTH)));
// System.out.println(" key.get(Calendar.DATE) = " + key.get(Calendar.DATE));
// System.out.println(" tempKey.get(Calendar.DATE) = " + (tempKey.get(Calendar.DATE)));
tempArr.add(value);
countEnd++;
if(key.get(Calendar.MONTH) == (tempKey.get(Calendar.MONTH))
&& key.get(Calendar.DATE) == (tempKey.get(Calendar.DATE))
&& key.get(Calendar.YEAR) == tempKey.get(Calendar.YEAR)){
// tempArr.add(value);
if(key.get(Calendar.YEAR) != year){
System.out.println(key.get(Calendar.YEAR));
year = key.get(Calendar.YEAR);
System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
+ key.get(Calendar.DATE) + " ");
}
toRemove.add(copyKey);
// toRemove.add(copyKey);
//keys.remove(copyKey);
}else{
//if(count <= 1){
//if(tempArr.size() == 1){
if(countEnd == countTotal){
tempArr.remove(tempArr.size() - 1);
}else{
if(tempArr.size() > 1){
tempArr.remove(tempArr.size() - 2);
}else{
tempArr.remove(tempArr.size() - 1);
}
if(toRemove.size() > 0){
toRemove.remove(toRemove.size() - 1);
}
}
// }
// else{
// tempArr.remove(tempArr.size() - 2);
// toRemove.remove(toRemove.size() - 1);
// }
//
// count = 0; //reset matches
//}
}
tempKey = key;
}
Collections.sort(tempArr);
for(Event e: tempArr){
if(e.endTime != null){
System.out.println(" " + e.eventName + " " + e.startTime.get(Calendar.HOUR_OF_DAY) + ":" +
e.startTime.get(Calendar.MINUTE) + " " + e.endTime.get(Calendar.HOUR_OF_DAY)
+ ":" + e.endTime.get(Calendar.MINUTE));
//tempKey = key;
// year = key.get(Calendar.YEAR);
//keys.remove(key);
}
else{
System.out.println(" " + e.eventName + " " + e.startTime.get(Calendar.HOUR_OF_DAY) + ":" +
e.startTime.get(Calendar.MINUTE));
// tempKey = key;
// year = key.get(Calendar.YEAR);
//keys.remove(key);
}
}
tempArr.clear();
//break;
for(GregorianCalendar remove: toRemove){
copyKeys.removeAll(Collections.singleton(remove));
}
for(GregorianCalendar key : copyKeys){
Event value = MyCalendarTester.myCal.getMyCalHash().get(key);
if(tempArr.size() == 0){
if(value.endTime != null){
if(key.get(Calendar.YEAR) == year){
System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
+ key.get(Calendar.DATE) + " " + value.startTime.get(Calendar.HOUR_OF_DAY) + ":" + value.startTime.get(Calendar.MINUTE) + " - " + value.endTime.get(Calendar.HOUR_OF_DAY)
+ ":" + value.endTime.get(Calendar.MINUTE) + " " + value.eventName);
// tempKey = key;
}else{
System.out.println(key.get(Calendar.YEAR));
System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
+ key.get(Calendar.DATE) + " " + value.startTime.get(Calendar.HOUR_OF_DAY) + ":" + value.startTime.get(Calendar.MINUTE) + " - " + value.endTime.get(Calendar.HOUR_OF_DAY)
+ ":" + value.endTime.get(Calendar.MINUTE) + " " + value.eventName );
year = key.get(Calendar.YEAR);
tempKey = key;
}
}else{
if(key.get(Calendar.YEAR) == year){
System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
+ key.get(Calendar.DATE) + " " + value.startTime.get(Calendar.HOUR_OF_DAY) + ":" + value.startTime.get(Calendar.MINUTE) + " " + value.eventName);
tempKey = key;
}else{
System.out.println(key.get(Calendar.YEAR));
System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY_OF_WEEK) - 1] + ", " + MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH) - 1] + " "
+ key.get(Calendar.DATE) + " " + value.startTime.get(Calendar.HOUR_OF_DAY) + ":" + value.startTime.get(Calendar.MINUTE) + " " + value.eventName);
System.out.println();
year = key.get(Calendar.YEAR);
tempKey = key;
}
}
}
}
}
}
public void eventList(){
整年=-1;
GregorianCalendar tempKey=null;
ArrayList tempArr=新的ArrayList();
ArrayList toRemove=新建ArrayList();
int countEnd=0;
if(MyCalendarTester.myCal.getMyCalHash().equals(null)){
System.out.println(“您的日历是空的!”);
}
否则{
System.out.println(“这是您的事件:”);
SortedSet keys=新树集(MyCalendarTester.myCal.getMyCalHash().keySet());
SortedSet copyKeys=新树集(MyCalendarTester.myCal.getMyCalHash().keySet());
tempKey=keys.first();
int countTotal=keys.size();
用于(GregorianCalendar键:复制键){
GregorianCalendar copyKey=密钥;
事件值=MyCalendarTester.myCal.getMyCalHash().get(键);
//System.out.println(“key.get(Calendar.MONTH)=”+key.get(Calendar.MONTH));
//System.out.println(“(tempKey.get(Calendar.MONTH))=”+(tempKey.get(Calendar.MONTH));
//System.out.println(“key.get(Calendar.DATE)=”+key.get(Calendar.DATE));
//System.out.println(“tempKey.get(Calendar.DATE)=”+(tempKey.get(Calendar.DATE));
临时增加(价值);
countEnd++;
if(key.get(Calendar.MONTH)=(tempKey.get(Calendar.MONTH))
&&key.get(Calendar.DATE)=(tempKey.get(Calendar.DATE))
&&key.get(Calendar.YEAR)==tempKey.get(Calendar.YEAR)){
//临时增加(价值);
if(key.get(日历年)!=年){
System.out.println(key.get(Calendar.YEAR));
年份=key.get(日历年);
System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY\u OF u WEEK)-1]+,“+MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH)-1]+”
+key.get(Calendar.DATE)+“”;
}
删除。添加(复制键);
//删除。添加(复制键);
//键。移除(复制键);
}否则{
//如果(计数1){
tempArr.remove(tempArr.size()-2);
}否则{
tempArr.remove(tempArr.size()-1);
}
如果(toRemove.size()>0){
toRemove.remove(toRemove.size()-1);
}
}
// }
//否则{
//tempArr.remove(tempArr.size()-2);
//toRemove.remove(toRemove.size()-1);
// }
//
//计数=0;//重置匹配项
//}
}
tempKey=key;
}
集合。排序(tempArr);
对于(事件e:节拍){
如果(e.endTime!=null){
System.out.println(“+e.eventName+”+e.startTime.get(Calendar.HOUR\u OF u DAY)+“:”+
e、 startTime.get(Calendar.MINUTE)+“+e.endTime.get(Calendar.HOUR\u OF\u DAY)
+“:”+e.endTime.get(Calendar.MINUTE));
//tempKey=key;
//年份=key.get(日历年);
//键。移除(键);
}
否则{
System.out.println(“+e.eventName+”+e.startTime.get(Calendar.HOUR\u OF u DAY)+“:”+
e、 startTime.get(Calendar.MINUTE));
//tempKey=key;
//年份=key.get(日历年);
//键。移除(键);
}
}
tempArr.clear();
//中断;
用于(GregorianCalendar删除:删除){
copyKeys.removeAll(Collections.singleton(remove));
}
用于(GregorianCalendar键:复制键){
事件值=MyCalendarTester.myCal.getMyCalHash().get(键);
if(tempArr.size()==0){
如果(value.endTime!=null){
if(key.get(Calendar.YEAR)=年){
System.out.println(MyCalendarTester.arrayOfDays[key.get(Calendar.DAY\u OF u WEEK)-1]+,“+MyCalendarTester.arrayOfMonths[key.get(Calendar.MONTH)-1]+”
+key.get(Calendar.DATE)+“”+value.startTime.get(Calendar.HOUR\u OF u DAY)+“:“+value.startTime.get(Calendar.MINUTE)+“-”+value.endTime.get(Calendar.HOUR\u OF u DAY)
+“:”+value.endTime.get(Calendar.MINUTE)+“+value.eventName);
//