Binance. Винагорода до 100 USD за реєстрацію!
Статус: Офлайн
Реєстрація: 04.07.2008
Повідом.: 677
Есть такая задачка:
Удалить дубликаты из коллекции строк, используя сравнение без учета регистра (для этого передать класс, реализующий Comparator<String> в конструктор HashSet)
Я написал:
Код:
public class labi { 
	public static void main(String[] args)  
	{ 
		Set<Task> wrf = new HashSet<Task>();
		wrf.add(new Task("LOGAN","LOGAN111"));
		wrf.add(new Task("LOGAN","LOGAN22222222"));
		wrf.add(new Task("LOGAN","LOGAN2"));
		wrf.add(new Task("asd","asd")); 
		wrf.add(new Task("asd","asd")); 
		wrf.add(new Task("LOGAN","LOGAN22222222"));
		ArrayList<Task>List = new ArrayList<Task>(); 
		
		 
		  
		Iterator<Task> it = wrf.iterator();
		while (it.hasNext())
		{
		 
		System.out.println(it.next().toString()); 
		}

	}
}
class Task implements Comparator<String>
{
	public String  name;
	public String  name2;
	public Task (String name,String name2)
	{
		this.name=name;
		this.name2=name2;
	}
	public   Task() {
		// TODO Auto-generated constructor stub
	}
	@Override
	public int compare(String o1, String o2) {
		
		o2=o2.toLowerCase();
		 return o2.compareTo(o1.toLowerCase());
	
	}
	public String toString()
	{
		return name + " " + name2;
	}
}

Но как мне удалить например строки - дубликаты?
 
Просто переопределить и все? :)А разве это не в мапе делается?

Код:
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Сloneable, java.io.Serializable {

    ...

    private transient HashMap<E,Object> map;

    ...

    public boolean add(E e) {
	return map.put(e, PRESENT)==null;
    }

    ...

}

намек понятен?
 
Код:
import java.sql.Time;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Duration;
import org.joda.time.Instant;
import org.joda.time.Interval;
import org.joda.time.LocalDate;
import com.google.*;
import org.joda.time.Period;
import org.joda.time.PeriodType;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern; 
import javax.swing.text.DateFormatter;

/*
 * 
 * 1.	Удалить дубликаты из коллекции строк, используя сравнение без учета регистра 
 * (для этого передать класс, реализующий Comparator<String> в конструктор HashSet)*/
public class labi { 
	public static void main(String[] args)  
	{ 
		Set<Task> wrf = new HashSet<Task>();
		wrf.add(new Task("LOGAN","LOGAN111"));
		wrf.add(new Task("LOGAN","LOGAN22222222"));
		wrf.add(new Task("LOGAN","LOGAN2"));
		wrf.add(new Task("asd","asd")); 
		wrf.add(new Task("asd","asd")); 
		wrf.add(new Task("LOGAN","LOGAN22222222"));
		ArrayList<Task>List = new ArrayList<Task>(); 
		
		 
		  
		Iterator<Task> it = wrf.iterator();
		while (it.hasNext())
		{
		 
		System.out.println(it.next().toString()); 
		}

	}
}
class Task implements Comparator<String>
{
	public String  name;
	public String  name2;
	private transient HashMap<Task,Object> map;

	public Task (String name,String name2)
	{
		this.name=name;
		this.name2=name2;
	}
	public   Task() {
		// TODO Auto-generated constructor stub
	} 
	public int hashcode() 
	{
	    int hash = 37;
        hash = hash*17 + name.hashCode();
        hash = hash*17 + name2.hashCode(); 
        return hash;
	}
	@Override
	
	  public boolean equals(Object obj) {
	    return (obj instanceof Task 
	            && name == ((Task) obj).name2);
	  }
	@Override
	public int compare(String o1, String o2) {
		
		o2=o2.toLowerCase();
		 return o2.compareTo(o1.toLowerCase());
	
	}
	public String toString()
	{
		return name + " " + name2;
	}
}
Переопределил два метода.
Все равно не работает.Возможно логика внутри методов неправильна?
 
Что это за нахер? :eek:

Код:
public int [B]hashcode()[/B] {
	int hash = 37;
        hash = hash*17 + name.hashCode();
        hash = hash*17 + name2.hashCode(); 
        return hash;
}

java.lang.Object заучить наизусть!1111

Код:
@Override
public int [B]hashCode()[/B] {
}
 
Но у ХешКода должна же быть какая либо реализация, например сравнения хэша у первого и второго числа?
Сейчас выводит:
LOGAN LOGAN22222222
asd asd
LOGAN LOGAN2
LOGAN LOGAN22222222
LOGAN LOGAN111


Я написал
public int hashCode() {

return 1;
}
 
Но у ХешКода должна же быть какая либо реализация, например сравнения хэша у первого и второго числа?

естественно.

Сейчас выводит:
LOGAN LOGAN22222222
asd asd
LOGAN LOGAN2
LOGAN LOGAN22222222
LOGAN LOGAN111


Я написал

потому что hashCode одинаковый а equals разный.

P.S. Бери книгу "Effective Java" Joshua Bloch и читай от и до. с такими познаниями тебе еще очень рано вообще коллекции трогать.
 
естественно.



потому что hashCode одинаковый а equals разный.

P.S. Бери книгу "Effective Java" Joshua Bloch и читай от и до. с такими познаниями тебе еще очень рано вообще коллекции трогать.
Просто как всегда это все нужно было сделать на вчера)))

import java.sql.Time;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Duration;
import org.joda.time.Instant;
import org.joda.time.Interval;
import org.joda.time.LocalDate;
import com.google.*;
import org.joda.time.Period;
import org.joda.time.PeriodType;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.text.DateFormatter;

/*
*
* 1. Удалить дубликаты из коллекции строк, используя сравнение без учета регистра
* (для этого передать класс, реализующий Comparator<String> в конструктор HashSet)*/
public class labi {
public static void main(String[] args)
{
Set<Task> wrf = new HashSet<Task>();
wrf.add(new Task("1","1"));
wrf.add(new Task("2","2"));
wrf.add(new Task("3","3"));
wrf.add(new Task("1","1"));
wrf.add(new Task("2","2"));
wrf.add(new Task("3","3"));
ArrayList<Task>List = new ArrayList<Task>();



Iterator<Task> it = wrf.iterator();
while (it.hasNext())
{

System.out.println(it.next().toString());
}

}
}
class Task implements Comparator<String>
{
public String name;
public String name2;
private transient HashMap<Task,Object> map;

public Task (String name,String name2)
{
this.name=name;
this.name2=name2;
}
public Task() {
// TODO Auto-generated constructor stub
}
@Override
public int hashCode() {

return 1;
}
@Override

public boolean equals(Object obj) {
return (obj instanceof Task
&& name.equalsIgnoreCase(((Task) obj).name2)) ;
}
@Override
public int compare(String o1, String o2) {

o2=o2.toLowerCase();
return o2.compareTo(o1.toLowerCase());

}
public String toString()
{
return name + " " + name2;
}
}

Вот так вроде работает
Выводит
3 3
2 2
1 1




Как реализовать такую задачу?
Имеется некоторый текст (задан в виде массива строк).
Есть словарь, который задает правила замены слов (ключ исходное слово, значение слово, на которое надо заменить).
Выполнить замены во всем исходном тексте.

Вот так же неправильно, нужно наверно методами Мэпа делать?
public class labi {
public static void main(String[] args)
{
Collection<String> List = new ArrayList<String>();
List.add("Привет, ну вот уже сегодня пятое число а тебя все еще нет в Украине . . . ");
dictionary d = new dictionary("Привет","GOOGLE",List);
d.replace();
}
}

class dictionary
{
private String key;
private String value;
public Collection<String> List;
private Map<String, String> hm = new HashMap<String, String>();
public dictionary() {
// TODO Auto-generated constructor stub
}
public dictionary(String key , String value, Collection<String> List)
{
this.key=key;
this.value=value;
this.List = List;
hm.put(this.key, this.value);
}
public String get_value()
{
return this.value;
}
public String get_key()
{
return this.key;
}
public void replace ()
{
// System.out.println("Contains?: " + hm.keySet().containsAll(List));
// System.out.println("Reverse check?: " + List.containsAll(hm.values()));
System.out.println("Contains?: " + hm.keySet().containsAll(List));
System.out.println("Contains?: " + hm.keySet().containsAll(List)+" "+ hm.keySet()+" "+ List);


String text = List.toString();
text = text.replaceAll(hm.keySet().toString(),hm.values().toString());
System.out.println(text+ " - " + hm.keySet().toString());






}

}
 
Останнє редагування:
Назад
Зверху Знизу