L1 -- L2 *could* be implemented to run in O(|L1| + |L2|) (expected) time, by building a hash table from L2, then walking over L1. If that's not done (for sufficiently large inputs, anyway), it's a performance disaster waiting to happen, and we'd probably be better off without it.