1. @org.junit.Test
    2. public void test(){
    3. //1.创建一个容器
    4. MyArrayList list = new MyArrayList();
    5. //2.装对象
    6. list.add("张三");
    7. list.add("李四");
    8. list.add("王五");
    9. list.add(null); //null也合法
    10. list.add(10);
    11. //3.查看有几个元素
    12. System.out.println(list.size());
    13. System.out.println();
    14. //4.遍历元素
    15. Object[] objects = list.toArray();
    16. for (int i = 0; i < objects.length; i++) {
    17. System.out.println(objects[i]);
    18. }
    19. System.out.println();
    20. //5.获取index位置的元素
    21. Object object = list.get(0);
    22. System.out.println(object);
    23. System.out.println();
    24. //6.查询李四的位置
    25. int index = list.indexOf("李四");
    26. System.out.println(index);
    27. System.out.println();
    28. //7.替换“李四”为“张康”
    29. Object[] newObjects = list.set("李四", "张康");
    30. for (int i = 0; i < newObjects.length; i++) {
    31. System.out.println(newObjects[i]);
    32. }
    33. }
    34. public class MyArrayList{
    35. private Object[] data;
    36. private int total;
    37. public MyArrayList() {
    38. this.data = new Object[10]; //默认初始化大小
    39. }
    40. //添加元素
    41. public void add(Object obj){
    42. //是否已满
    43. if(total >= data.length)
    44. //扩容
    45. data = Arrays.copyOf(data, data.length*2);
    46. data[total++] = obj;
    47. }
    48. //获取有效元素的个数
    49. public int size(){
    50. return total;
    51. }
    52. //把数据用数组返回
    53. public Object[] toArray(){
    54. return Arrays.copyOf(data, total);
    55. }
    56. //获取index位置的元素
    57. public Object get(int index){
    58. if (index < 0 || index >= total)
    59. throw new IndexOutOfBoundsException(index + "不合法");
    60. return data[index];
    61. }
    62. //查找obj在当前容器中的索引,如果没有,返回-1
    63. public int indexOf(Object obj){
    64. int index = -1;
    65. //null.equals("")会报空指针异常
    66. //"".equals(null)不会报空指针异常
    67. if (obj == null) {
    68. for (int i = 0; i < total; i++){
    69. if (obj == data[i]) {
    70. index = i;
    71. break;
    72. }
    73. }
    74. } else {
    75. for (int i = 0; i < total; i++){
    76. if (obj.equals(data[i]) ) {
    77. index = i;
    78. break;
    79. }
    80. }
    81. }
    82. return index;
    83. }
    84. //删除对象
    85. public void remove(Object obj) {
    86. //(1)找到obj位置
    87. int index = indexOf(obj);
    88. //(2)删除
    89. if (index != -1) {
    90. System.arraycopy(data, index+1, data, index, total-index-1);
    91. data[--total] = null;
    92. }
    93. }
    94. //把容器中的old替换成dest
    95. public Object[] set(Object old, Object dest) {
    96. int index = indexOf(old);
    97. if (index != -1)
    98. data[index] = dest;
    99. return Arrays.copyOf(data, total);
    100. }
    101. }