我有以下代碼。不過,我懷疑這是否是正確的實施方式。在Java中使用集合的正確方法?
我的意思是:在收集框架有使用和創建類(MemberList
)使用ArrayList
,LinkedList
,優先級隊列管理許多成員可以實現的聚集許多數據結構...
我想使用一個符合我需求的數據結構,並且在搜索,排序,刪除,添加,修改和刪除時,它的可能性最小。
public class MemberList{
/**
*a list of accounts existing in the database
*/
private static List<Member> members = new ArrayList<Member>();
/**
* add a member to our member list
* @param m the member to be added
*/
public static void Add(Member m)
{
members.add(m);
/**
* delete a member from our member list
* @param m the member to be deleted
*/
public static void Delete(Member m)
{
Iterator<Member> it = members.iterator();
while(it.hasNext())
{
if(m.equals(it.next()))
{
it.remove();
}
}
}
/**
* Search for a specific member in the member list
* @param m the member that needs to be found
* @return the reference of the object Member
* @throws UserNotFoundExeption whether the member was not found in the list
*/
public static Member Search (Member m) throws UserNotFoundExeption
{
Iterator<Member> it = members.iterator();
while(it.hasNext())
{
if(m.equals(it.next()))
{
return it.next();
}else{
UserNotFoundExeption ex = new UserNotFoundExeption(it.next().getUsername());
throw ex;
}
}
return null;
}
/**
* The login method enables checking whether the login was made successfully or not. if not, it can throw two
* exceptions to handle the errors
* @param member
* @return
* @throws UserNotFoundExeption
* @throws FailedLoginException
*/
public static boolean login (Member m)
throws UserNotFoundExeption,FailedLoginException {
try{
Member member = Search(m);
if (!m.authenticate(member.getPassword()))
{
FailedLoginException ex2 = new FailedLoginException (member.getPassword());
throw ex2;
}
else
{
return true;
}
}catch(UserNotFoundExeption ex){
throw ex;
}
}
/**
* this behavior modify attributes of the corresponding class
* @param <T> this generic helps to accept any type of parameter change, hence we can change any type
* @param m this is the member that need to change his information
* @param choice the choice of which information to change
* @param change the new change on the member attribute
* @throws UserNotFoundExeption
*/
public static <T> void Modify(Member m, int choice, T change) throws UserNotFoundExeption
{
try{
Member member = Search(m);
switch(choice)
{
case 1:
member.setUsername((String)change);
break;
case 2:
member.setPassword((String)change);
break;
case 3:
member.setCommunity((Community)change);
break;
}
}catch(UserNotFoundExeption ex){
throw ex;
}
}
/**
* display the member list objects information
*/
public static void Display()
{
Iterator<Member> it = members.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
/**
* Sort objects in the list
*/
public static void Sort()
{
Iterator<Member> it = members.iterator();
Member[] Members_Array = members.toArray(new Member[members.size()]);
Member temp;
for(int i = 0; i<members.size(); i++)
{
for(int j = 0; j < members.size() - (i+1); j++)
{
if(Members_Array[j].compareTo(Members_Array[j+1]) > 0)
{
temp = Members_Array[j];
Members_Array[j] = Members_Array[j+1];
Members_Array[j+1] = temp;
}
}
}
}
}
謝謝!
只是出於好奇:爲什麼一切都在你的類的靜態? – mabi 2013-04-07 13:26:10
更重要的是:不幸的是,分類和修改不能很好地結合在一起。所以一個答案需要考慮更多的用途:你是否查詢你的列表很多?你每秒鐘修改一次還是更多? – mabi 2013-04-07 13:29:55
.Delete()(。remove()),.Sort()(Collections.sort())和.Search()(。indexOf(),. contains())通常已經實現,在大多數情況下,任何單獨的實施。關於主題:正如馬比已經說過的,決定你最需要的是什麼(90%的情況),並使用適合你需求的列表類型。 – 2013-04-07 13:56:58