نسخة الكود كما يلي:
استيراد java.util.arrays ؛
/**
* تنفيذ الجداول الخطية المتسلسلة
*/
الطبقة العامة linelist <e> {
حجم الباحث الخاص ؛ // الطول
كائن خاص [] صفيف ؛ // الصفيف الأساسي
نهائي خاص int default_length = 16 ؛ // الطول الافتراضي
/**
* طريقة البناء غير المعلمة
*/
linelist العامة () {
الحجم = 0 ؛
// بناء صفيف باستخدام الطول الافتراضي
صفيف = كائن جديد [default_length] ؛
}
/**
* حدد طول البناء
* param طول تحديد الطول الأولي
*/
عمري عام (طول int) {
إذا (الطول <0) {
رمي جديد غير شرعي ("الطول الأولي غير قانوني:"+الطول) ؛
}
// بناء صفيف بطول محدد
صفيف = كائن جديد [طول] ؛
}
/**
* حدد عنصر التهيئة وطول البناء
* @param element تهيئة العنصر
* طول التهيئة طول param
*/
عمري عام (عنصر e ، طول int) {
إذا (الطول <1) {
رمي جديد غير شرعي ("الطول الأولي غير قانوني:"+الطول) ؛
}
// بناء صفيف بطول محدد
صفيف = كائن جديد [طول] ؛
// تهيئة العنصر الأول
صفيف [0] = عنصر ؛
حجم ++ ؛
}
/**
* حدد عناصر التهيئة للبناء
* @param element تهيئة العنصر
*/
عمري عام (e element) {
// تهيئة الصفيف مع الطول الافتراضي
صفيف = كائن جديد [default_length] ؛
// تهيئة العنصر الأول
صفيف [0] = عنصر ؛
}
/**
* احصل على عدد العناصر
*/
حجم int العام () {
حجم العودة
}
/**
* حدد ما إذا كان فارغًا
*/
منطقية عامة isempty () {
حجم الإرجاع == 0 ؛
}
/**
* تحديد ما إذا كان هذا العنصر مدرجًا
*/
يحتوي المنطق العام على (e e) {
if (indexof (e) == -1) {
العودة كاذبة
}
العودة صحيح.
}
/**
* تنسيق كصفيف
*/
الكائن العام [] toarray () {
إرجاع صفائف. copyof (صفيف ، حجم) ؛
}
/**
* أضف عنصرًا إلى ذيل الجدول الخطي
* param e
* @يعود
*/
void public add (e e) {
ExtendCapacity (Size+1) ؛
صفيف [الحجم] = ه ؛
حجم ++ ؛
}
/**
* توسيع السعة
* param طول الطول المطلوب
*/
void private ExtendCapacity (طول int) {
// يجب أن يكون طول الصفيف الحالي والطول المطلوب الحد الأقصى
int mincapacity = math.max (Array.Length ، length) ؛
// الحكم على ما إذا كان التوسع في القدرات مطلوبًا
if (mincapacity - array.length> 0) {
// يتم زيادة طول الصفيف بمقدار النصف
int newLength = array.length + array.length/2 ؛
// إذا كان الطول الجديد أصغر من المتطلبات ، فاستخدم الطول المطلوب كطول الصفيف
if (newLength <mincapacity) {
NewLength = MinCapacity ؛
}
// لا يمكن أن يتجاوز طول الصفيف integer.max_value
if (newLength> integer.max_value - 8) {
newLength = integer.max_value ؛
}
// التوسع Array
Array = arrays.copyof (Array ، NewLength) ؛
}
}
/**
* قم بإزالة كل هذا العنصر من الجدول الخطي
* @param e عناصر يجب إزالتها
* @يعود
*/
إزالة الفراغ العام (e e) {
if (e == null) {
لـ (int i = 0 ؛ i <size ؛ i ++) {
if (Array [i] == null) {
fastremove (i) ؛
}
}
}آخر{
لـ (int i = 0 ؛ i <size ؛ i ++) {
if (E.equals (Array [i])) {
fastremove (i) ؛
}
}
}
}
/**
* حذف العنصر في الفهرس ، وحرك العناصر التالية إلى الأمام بدوره
* فهرس param الفهرس الذي يجب حذفه
*/
private void fastremove (int index) {
if (size-index-1> 0) {
// تبدأ المصفوفات من الفهرس+1 وكلها تتحرك للأمام
System.ArrayCopy (Array ، INDEX+1 ، Array ، Index ، Size-1) ؛
}
// الرجاء تفريغ العنصر الأخير
صفيف [-الحجم] = فارغ ؛
}
/**
* امسح الجدول الخطي
*/
الفراغ العام clear () {
// املأ جميع المصفوفات في فارغ
Arrays.fill (Array ، Null) ؛
// قم بتغيير عدد العناصر إلى 0
الحجم = 0 ؛
}
/**
* احصل على العنصر في الفهرس
* فهرس param
* @عنصر العودة في الفهرس
*/
suppressWarnings ("غير محدد")
عام E GET (int index) {
CheckIndex (فهرس) ؛
عودة (هـ) صفيف [فهرس] ؛
}
/**
* تحقق مما إذا كان الفهرس خارج الحدود
* فهرس param
*/
private void checkIndex (int index) {
if (index> = size || index <0) {
رمي indexoutofboundsexception جديد ("indexoutBoundSexception") ؛
}
}
/**
* قم بتعديل العنصر في الفهرس إلى عنصر جديد
* موقف فهرس فهرس Param
* @param element
* @عنصر العودة في الفهرس الأصلي
*/
suppressWarnings ("غير محدد")
مجموعة E العامة (int index ، e element) {
CheckIndex (فهرس) ؛
e e = (e) array [index] ؛
صفيف [فهرس] = عنصر ؛
إرجاع ه ؛
}
/**
* أدخل العنصر المحدد في الفهرس المحدد
* موقف فهرس فهرس Param
* @param element
*/
الفراغ العام إضافة (int index ، e element) {
// تحقق من الفهرس
CheckIndex (فهرس) ؛
// هل من الضروري توسيع القدرة
ExtendCapacity (Size+1) ؛
// انسخ الصفيف
System.ArrayCopy (Array ، INDEX ، Array ، INDEX+1 ، Size-Size-Edex) ؛
صفيف [فهرس] = عنصر ؛
}
/**
* إزالة العناصر في الفهرس
* فهرس فهرس param
* regurn المحذوفة العناصر
*/
suppressWarnings ("غير محدد")
الإزالة العامة (int index) {
CheckIndex (فهرس) ؛
// احصل على عنصر موضع الفهرس
e e = (e) array [index] ؛
fastremove (فهرس) ؛
إرجاع ه ؛
}
/**
* احصل على فهرس الموقع حيث يظهر العنصر أولاً
* @param e عنصر للبحث عنه
* @العودة إذا كان -1 ، فهذا يعني أن الجدول الخطي لا يحتوي على هذا العنصر
*/
int indexof (e e) العام {
if (e == null) {
لـ (int i = 0 ؛ i <size ؛ i ++) {
if (e == array [i]) {
العودة أنا.
}
}
}
لـ (int i = 0 ؛ i <size ؛ i ++) {
if (E.equals (Array [i])) {
العودة أنا.
}
}
العودة -1 ؛
}
/**
* احصل على فهرس الحدوث الأخير للعنصر
* @param e عنصر للبحث عنه
* @العودة إذا كان -1 ، فهذا يعني أن الجدول الخطي لا يحتوي على هذا العنصر
*/
العام int lastIndexof (e e) {
// احكم ما إذا كان العنصر فارغًا
if (e == null) {
لـ (int i = size-1 ؛ i> = 0 ؛ i-) {
if (e == array [i]) {
العودة أنا.
}
}
}
لـ (int i = size-1 ؛ i> = 0 ؛ i-) {
// إذا كان NULL ، فسيتم تشغيل استثناء فارغ هنا
// لذلك تحتاج إلى إضافة التحقق سواء كان فارغًا
if (E.equals (Array [i])) {
العودة أنا.
}
}
العودة -1 ؛
}
/**
* اعتراض الجدول الخطي
* param fromindex ابدأ الفهرسة
* @param toindex end index
* @العودة الجدول الخطي
*/
suppressWarnings ("غير محدد")
المحرك الأساسي العام <e> (int fromIndex ، int toindex) {
// احكم على ما إذا كان فهرس البدء خارج الحدود
if (fromIndex <0 || fromIndex> = size) {
رمي indexoutofboundsexception جديد ("start index cross-border:"+fromindex) ؛
}
// احكم على ما إذا كان مؤشر النهاية خارج الحدود
if (toindex> = size || fromIndex <0) {
رمي indexoutofboundsexception جديد ("end index outbound:"+toindex) ؛
}
// احكم على ما إذا كان فهرس البدء وفهرس النهاية صحيحين
if (fromIndex> toindex) {
قم بإلقاء NEWALLALARGUMINESEXCEPTION ("المعلمة غير صحيحة ، يجب أن يكون فهرس البدء أكبر من أو يساوي فهرس النهاية") ؛
}
linelist <e> list = new linelist <e> () ؛
لـ (int i = fromIndex ، j = toindex ؛ i <= j ؛ i ++) {
list.add ((e) array [i]) ؛
}
قائمة العودة
}
}