| 1 16 package org.apache.commons.lang; 17 18 import java.lang.reflect.Array ; 19 import java.util.HashMap ; 20 import java.util.Map ; 21 22 import org.apache.commons.lang.builder.EqualsBuilder; 23 import org.apache.commons.lang.builder.HashCodeBuilder; 24 import org.apache.commons.lang.builder.ToStringBuilder; 25 import org.apache.commons.lang.builder.ToStringStyle; 26 27 49 public class ArrayUtils { 50 51 54 public static final Object [] EMPTY_OBJECT_ARRAY = new Object [0]; 55 58 public static final Class [] EMPTY_CLASS_ARRAY = new Class [0]; 59 62 public static final String [] EMPTY_STRING_ARRAY = new String [0]; 63 66 public static final long[] EMPTY_LONG_ARRAY = new long[0]; 67 70 public static final Long [] EMPTY_LONG_OBJECT_ARRAY = new Long [0]; 71 74 public static final int[] EMPTY_INT_ARRAY = new int[0]; 75 78 public static final Integer [] EMPTY_INTEGER_OBJECT_ARRAY = new Integer [0]; 79 82 public static final short[] EMPTY_SHORT_ARRAY = new short[0]; 83 86 public static final Short [] EMPTY_SHORT_OBJECT_ARRAY = new Short [0]; 87 90 public static final byte[] EMPTY_BYTE_ARRAY = new byte[0]; 91 94 public static final Byte [] EMPTY_BYTE_OBJECT_ARRAY = new Byte [0]; 95 98 public static final double[] EMPTY_DOUBLE_ARRAY = new double[0]; 99 102 public static final Double [] EMPTY_DOUBLE_OBJECT_ARRAY = new Double [0]; 103 106 public static final float[] EMPTY_FLOAT_ARRAY = new float[0]; 107 110 public static final Float [] EMPTY_FLOAT_OBJECT_ARRAY = new Float [0]; 111 114 public static final boolean[] EMPTY_BOOLEAN_ARRAY = new boolean[0]; 115 118 public static final Boolean [] EMPTY_BOOLEAN_OBJECT_ARRAY = new Boolean [0]; 119 122 public static final char[] EMPTY_CHAR_ARRAY = new char[0]; 123 126 public static final Character [] EMPTY_CHARACTER_OBJECT_ARRAY = new Character [0]; 127 128 135 public ArrayUtils() { 136 } 137 138 151 public static String toString(Object array) { 152 return toString(array, "{}"); 153 } 154 155 167 public static String toString(Object array, String stringIfNull) { 168 if (array == null) { 169 return stringIfNull; 170 } 171 return new ToStringBuilder(array, ToStringStyle.SIMPLE_STYLE).append(array).toString(); 172 } 173 174 182 public static int hashCode(Object array) { 183 return new HashCodeBuilder().append(array).toHashCode(); 184 } 185 186 196 public static boolean isEquals(Object array1, Object array2) { 197 return new EqualsBuilder().append(array1, array2).isEquals(); 198 } 199 200 227 public static Map toMap(Object [] array) { 228 if (array == null) { 229 return null; 230 } 231 final Map map = new HashMap ((int) (array.length * 1.5)); 232 for (int i = 0; i < array.length; i++) { 233 Object object = array[i]; 234 if (object instanceof Map.Entry ) { 235 Map.Entry entry = (Map.Entry ) object; 236 map.put(entry.getKey(), entry.getValue()); 237 } else if (object instanceof Object []) { 238 Object [] entry = (Object []) object; 239 if (entry.length < 2) { 240 throw new IllegalArgumentException ("Array element " + i + ", '" 241 + object 242 + "', has a length less than 2"); 243 } 244 map.put(entry[0], entry[1]); 245 } else { 246 throw new IllegalArgumentException ("Array element " + i + ", '" 247 + object 248 + "', is neither of type Map.Entry nor an Array"); 249 } 250 } 251 return map; 252 } 253 254 268 public static Object [] clone(Object [] array) { 269 if (array == null) { 270 return null; 271 } 272 return (Object []) array.clone(); 273 } 274 275 284 public static long[] clone(long[] array) { 285 if (array == null) { 286 return null; 287 } 288 return (long[]) array.clone(); 289 } 290 291 300 public static int[] clone(int[] array) { 301 if (array == null) { 302 return null; 303 } 304 return (int[]) array.clone(); 305 } 306 307 316 public static short[] clone(short[] array) { 317 if (array == null) { 318 return null; 319 } 320 return (short[]) array.clone(); 321 } 322 323 332 public static char[] clone(char[] array) { 333 if (array == null) { 334 return null; 335 } 336 return (char[]) array.clone(); 337 } 338 339 348 public static byte[] clone(byte[] array) { 349 if (array == null) { 350 return null; 351 } 352 return (byte[]) array.clone(); 353 } 354 355 364 public static double[] clone(double[] array) { 365 if (array == null) { 366 return null; 367 } 368 return (double[]) array.clone(); 369 } 370 371 380 public static float[] clone(float[] array) { 381 if (array == null) { 382 return null; 383 } 384 return (float[]) array.clone(); 385 } 386 387 396 public static boolean[] clone(boolean[] array) { 397 if (array == null) { 398 return null; 399 } 400 return (boolean[]) array.clone(); 401 } 402 403 432 public static Object [] subarray(Object [] array, int startIndexInclusive, int endIndexExclusive) { 433 if (array == null) { 434 return null; 435 } 436 if (startIndexInclusive < 0) { 437 startIndexInclusive = 0; 438 } 439 if (endIndexExclusive > array.length) { 440 endIndexExclusive = array.length; 441 } 442 int newSize = endIndexExclusive - startIndexInclusive; 443 Class type = array.getClass().getComponentType(); 444 if (newSize <= 0) { 445 return (Object []) Array.newInstance(type, 0); 446 } 447 Object [] subarray = (Object []) Array.newInstance(type, newSize); 448 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 449 return subarray; 450 } 451 452 471 public static long[] subarray(long[] array, int startIndexInclusive, int endIndexExclusive) { 472 if (array == null) { 473 return null; 474 } 475 if (startIndexInclusive < 0) { 476 startIndexInclusive = 0; 477 } 478 if (endIndexExclusive > array.length) { 479 endIndexExclusive = array.length; 480 } 481 int newSize = endIndexExclusive - startIndexInclusive; 482 if (newSize <= 0) { 483 return EMPTY_LONG_ARRAY; 484 } 485 486 long[] subarray = new long[newSize]; 487 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 488 return subarray; 489 } 490 491 510 public static int[] subarray(int[] array, int startIndexInclusive, int endIndexExclusive) { 511 if (array == null) { 512 return null; 513 } 514 if (startIndexInclusive < 0) { 515 startIndexInclusive = 0; 516 } 517 if (endIndexExclusive > array.length) { 518 endIndexExclusive = array.length; 519 } 520 int newSize = endIndexExclusive - startIndexInclusive; 521 if (newSize <= 0) { 522 return EMPTY_INT_ARRAY; 523 } 524 525 int[] subarray = new int[newSize]; 526 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 527 return subarray; 528 } 529 530 549 public static short[] subarray(short[] array, int startIndexInclusive, int endIndexExclusive) { 550 if (array == null) { 551 return null; 552 } 553 if (startIndexInclusive < 0) { 554 startIndexInclusive = 0; 555 } 556 if (endIndexExclusive > array.length) { 557 endIndexExclusive = array.length; 558 } 559 int newSize = endIndexExclusive - startIndexInclusive; 560 if (newSize <= 0) { 561 return EMPTY_SHORT_ARRAY; 562 } 563 564 short[] subarray = new short[newSize]; 565 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 566 return subarray; 567 } 568 569 588 public static char[] subarray(char[] array, int startIndexInclusive, int endIndexExclusive) { 589 if (array == null) { 590 return null; 591 } 592 if (startIndexInclusive < 0) { 593 startIndexInclusive = 0; 594 } 595 if (endIndexExclusive > array.length) { 596 endIndexExclusive = array.length; 597 } 598 int newSize = endIndexExclusive - startIndexInclusive; 599 if (newSize <= 0) { 600 return EMPTY_CHAR_ARRAY; 601 } 602 603 char[] subarray = new char[newSize]; 604 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 605 return subarray; 606 } 607 608 627 public static byte[] subarray(byte[] array, int startIndexInclusive, int endIndexExclusive) { 628 if (array == null) { 629 return null; 630 } 631 if (startIndexInclusive < 0) { 632 startIndexInclusive = 0; 633 } 634 if (endIndexExclusive > array.length) { 635 endIndexExclusive = array.length; 636 } 637 int newSize = endIndexExclusive - startIndexInclusive; 638 if (newSize <= 0) { 639 return EMPTY_BYTE_ARRAY; 640 } 641 642 byte[] subarray = new byte[newSize]; 643 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 644 return subarray; 645 } 646 647 666 public static double[] subarray(double[] array, int startIndexInclusive, int endIndexExclusive) { 667 if (array == null) { 668 return null; 669 } 670 if (startIndexInclusive < 0) { 671 startIndexInclusive = 0; 672 } 673 if (endIndexExclusive > array.length) { 674 endIndexExclusive = array.length; 675 } 676 int newSize = endIndexExclusive - startIndexInclusive; 677 if (newSize <= 0) { 678 return EMPTY_DOUBLE_ARRAY; 679 } 680 681 double[] subarray = new double[newSize]; 682 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 683 return subarray; 684 } 685 686 705 public static float[] subarray(float[] array, int startIndexInclusive, int endIndexExclusive) { 706 if (array == null) { 707 return null; 708 } 709 if (startIndexInclusive < 0) { 710 startIndexInclusive = 0; 711 } 712 if (endIndexExclusive > array.length) { 713 endIndexExclusive = array.length; 714 } 715 int newSize = endIndexExclusive - startIndexInclusive; 716 if (newSize <= 0) { 717 return EMPTY_FLOAT_ARRAY; 718 } 719 720 float[] subarray = new float[newSize]; 721 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 722 return subarray; 723 } 724 725 744 public static boolean[] subarray(boolean[] array, int startIndexInclusive, int endIndexExclusive) { 745 if (array == null) { 746 return null; 747 } 748 if (startIndexInclusive < 0) { 749 startIndexInclusive = 0; 750 } 751 if (endIndexExclusive > array.length) { 752 endIndexExclusive = array.length; 753 } 754 int newSize = endIndexExclusive - startIndexInclusive; 755 if (newSize <= 0) { 756 return EMPTY_BOOLEAN_ARRAY; 757 } 758 759 boolean[] subarray = new boolean[newSize]; 760 System.arraycopy(array, startIndexInclusive, subarray, 0, newSize); 761 return subarray; 762 } 763 764 777 public static boolean isSameLength(Object [] array1, Object [] array2) { 778 if ((array1 == null && array2 != null && array2.length > 0) || 779 (array2 == null && array1 != null && array1.length > 0) || 780 (array1 != null && array2 != null && array1.length != array2.length)) { 781 return false; 782 } 783 return true; 784 } 785 786 795 public static boolean isSameLength(long[] array1, long[] array2) { 796 if ((array1 == null && array2 != null && array2.length > 0) || 797 (array2 == null && array1 != null && array1.length > 0) || 798 (array1 != null && array2 != null && array1.length != array2.length)) { 799 return false; 800 } 801 return true; 802 } 803 804 813 public static boolean isSameLength(int[] array1, int[] array2) { 814 if ((array1 == null && array2 != null && array2.length > 0) || 815 (array2 == null && array1 != null && array1.length > 0) || 816 (array1 != null && array2 != null && array1.length != array2.length)) { 817 return false; 818 } 819 return true; 820 } 821 822 831 public static boolean isSameLength(short[] array1, short[] array2) { 832 if ((array1 == null && array2 != null && array2.length > 0) || 833 (array2 == null && array1 != null && array1.length > 0) || 834 (array1 != null && array2 != null && array1.length != array2.length)) { 835 return false; 836 } 837 return true; 838 } 839 840 849 public static boolean isSameLength(char[] array1, char[] array2) { 850 if ((array1 == null && array2 != null && array2.length > 0) || 851 (array2 == null && array1 != null && array1.length > 0) || 852 (array1 != null && array2 != null && array1.length != array2.length)) { 853 return false; 854 } 855 return true; 856 } 857 858 867 public static boolean isSameLength(byte[] array1, byte[] array2) { 868 if ((array1 == null && array2 != null && array2.length > 0) || 869 (array2 == null && array1 != null && array1.length > 0) || 870 (array1 != null && array2 != null && array1.length != array2.length)) { 871 return false; 872 } 873 return true; 874 } 875 876 |