Added testAndAdd() for adding elements only if they are not already in the
list. Modified clear...() and remove...() to cope with being passed a null list. git-svn-id: https://samskivert.googlecode.com/svn/trunk@277 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: ListUtil.java,v 1.2 2001/08/15 04:11:10 mdb Exp $
|
// $Id: ListUtil.java,v 1.3 2001/08/15 18:02:26 mdb Exp $
|
||||||
|
|
||||||
package com.samskivert.util;
|
package com.samskivert.util;
|
||||||
|
|
||||||
@@ -85,8 +85,8 @@ public class ListUtil
|
|||||||
|
|
||||||
// search for a spot to insert yon element; assuming we'll insert
|
// search for a spot to insert yon element; assuming we'll insert
|
||||||
// it at the end of the list if we don't find one
|
// it at the end of the list if we don't find one
|
||||||
int index = list.length;
|
int llength = list.length;
|
||||||
int llength = list.length; // no optimizing bastards
|
int index = llength;
|
||||||
for (int i = startIdx; i < llength; i++) {
|
for (int i = startIdx; i < llength; i++) {
|
||||||
if (list[i] == null) {
|
if (list[i] == null) {
|
||||||
index = i;
|
index = i;
|
||||||
@@ -105,6 +105,55 @@ public class ListUtil
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches through the list checking to see if the element supplied
|
||||||
|
* is already in the list (using <code>equals()</code> to check for
|
||||||
|
* equality) and adds it if it is not.
|
||||||
|
*
|
||||||
|
* @param list the list to which to add the element. Can be null.
|
||||||
|
* @param element the element to test and add.
|
||||||
|
*
|
||||||
|
* @return a reference to the list with element added (might not be
|
||||||
|
* the list you passed in due to expansion, or allocation) or null if
|
||||||
|
* the element was already in the original array.
|
||||||
|
*/
|
||||||
|
public static Object[] testAndAdd (Object[] list, Object element)
|
||||||
|
{
|
||||||
|
// make sure we've got a list to work with
|
||||||
|
if (list == null) {
|
||||||
|
list = new Object[DEFAULT_LIST_SIZE];
|
||||||
|
}
|
||||||
|
|
||||||
|
// search for a spot to insert yon element; we'll insert it at the
|
||||||
|
// end of the list if we don't find a spot
|
||||||
|
int llength = list.length;
|
||||||
|
int index = llength;
|
||||||
|
for (int i = 0; i < llength; i++) {
|
||||||
|
Object elem = list[i];
|
||||||
|
if (elem == null) {
|
||||||
|
// only update our target index if we haven't already
|
||||||
|
// found a spot to put the element
|
||||||
|
if (index == llength) {
|
||||||
|
index = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (elem.equals(element)) {
|
||||||
|
// oops, it's already in the list
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// expand the list if necessary
|
||||||
|
if (index >= list.length) {
|
||||||
|
list = accomodate(list, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
// stick the element on in
|
||||||
|
list[index] = element;
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Looks for an object that is referentially equal to the supplied
|
* Looks for an object that is referentially equal to the supplied
|
||||||
* element (<code>list[idx] == element</code>). Passing a null
|
* element (<code>list[idx] == element</code>). Passing a null
|
||||||
@@ -157,6 +206,11 @@ public class ListUtil
|
|||||||
*/
|
*/
|
||||||
public static Object clear (Object[] list, Object element)
|
public static Object clear (Object[] list, Object element)
|
||||||
{
|
{
|
||||||
|
// nothing to clear from an empty list
|
||||||
|
if (list == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
int llength = list.length; // no optimizing bastards
|
int llength = list.length; // no optimizing bastards
|
||||||
for (int i = 0; i < llength; i++) {
|
for (int i = 0; i < llength; i++) {
|
||||||
Object elem = list[i];
|
Object elem = list[i];
|
||||||
@@ -180,6 +234,11 @@ public class ListUtil
|
|||||||
*/
|
*/
|
||||||
public static Object clearEqual (Object[] list, Object element)
|
public static Object clearEqual (Object[] list, Object element)
|
||||||
{
|
{
|
||||||
|
// nothing to clear from an empty list
|
||||||
|
if (list == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
int llength = list.length; // no optimizing bastards
|
int llength = list.length; // no optimizing bastards
|
||||||
for (int i = 0; i < llength; i++) {
|
for (int i = 0; i < llength; i++) {
|
||||||
Object elem = list[i];
|
Object elem = list[i];
|
||||||
@@ -202,6 +261,11 @@ public class ListUtil
|
|||||||
*/
|
*/
|
||||||
public static Object remove (Object[] list, Object element)
|
public static Object remove (Object[] list, Object element)
|
||||||
{
|
{
|
||||||
|
// nothing to remove from an empty list
|
||||||
|
if (list == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
int llength = list.length; // no optimizing bastards
|
int llength = list.length; // no optimizing bastards
|
||||||
for (int i = 0; i < llength; i++) {
|
for (int i = 0; i < llength; i++) {
|
||||||
Object elem = list[i];
|
Object elem = list[i];
|
||||||
@@ -227,6 +291,11 @@ public class ListUtil
|
|||||||
*/
|
*/
|
||||||
public static Object removeEqual (Object[] list, Object element)
|
public static Object removeEqual (Object[] list, Object element)
|
||||||
{
|
{
|
||||||
|
// nothing to remove from an empty list
|
||||||
|
if (list == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
int llength = list.length; // no optimizing bastards
|
int llength = list.length; // no optimizing bastards
|
||||||
for (int i = 0; i < llength; i++) {
|
for (int i = 0; i < llength; i++) {
|
||||||
Object elem = list[i];
|
Object elem = list[i];
|
||||||
@@ -320,6 +389,30 @@ public class ListUtil
|
|||||||
|
|
||||||
ListUtil.remove(list, 0);
|
ListUtil.remove(list, 0);
|
||||||
System.out.println("remove(0): " + StringUtil.toString(list));
|
System.out.println("remove(0): " + StringUtil.toString(list));
|
||||||
|
|
||||||
|
ListUtil.remove(list, 0);
|
||||||
|
System.out.println("remove(0): " + StringUtil.toString(list));
|
||||||
|
|
||||||
|
Object[] tl = ListUtil.testAndAdd(list, bar);
|
||||||
|
if (tl == null) {
|
||||||
|
System.out.println("testAndAdd(bar): failed: " +
|
||||||
|
StringUtil.toString(list));
|
||||||
|
} else {
|
||||||
|
list = tl;
|
||||||
|
System.out.println("testAndAdd(bar): added: " +
|
||||||
|
StringUtil.toString(list));
|
||||||
|
}
|
||||||
|
|
||||||
|
String biz = "biz";
|
||||||
|
tl = ListUtil.testAndAdd(list, biz);
|
||||||
|
if (tl == null) {
|
||||||
|
System.out.println("testAndAdd(biz): failed: " +
|
||||||
|
StringUtil.toString(list));
|
||||||
|
} else {
|
||||||
|
list = tl;
|
||||||
|
System.out.println("testAndAdd(biz): added: " +
|
||||||
|
StringUtil.toString(list));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user